Re[2]: Как портировать встроенный класс с java d c++
Здравствуйте, Sheridan, Вы писали:
S>Приветствую, wl., вы писали:
wl.>> как это можно портировать на с++?
S>Да приблизительно так и будет выглядеть...
S>емнип кактотак или я чегото не понял...
нет, так не получится, компилятор ругается на вызов нестатического метода get_x().
посмотрел как делает джава: она втихиря подставляет указатель на внешний класс (в нашем случае a) в конструктор класса b, и при вызове методов класса a из b подставляет этот указатель.
не очень удобно получается, если методов вызывается очень много, но в принципе должно помочь.
Re: Как портировать встроенный класс с java d c++
Приветствую, wl., вы писали:
wl.> как это можно портировать на с++?
Да приблизительно так и будет выглядеть...
class a
{
public :
int x = 10;
int get_x()
{
return x;
}
class b
{
public :
int _get_x()
{
return a::get_x();
}
};
};
емнип кактотак или я чегото не понял...
Matrix has you...
Как портировать встроенный класс с java d c++
От:
wl.
Дата: 20.08.09 13:46
Оценка:
есть примерно такой кусок кода:
class a
{
int x = 10;
int get_x()
{
return x;
}
class b
{
public int _get_x()
{
return get_x();
}
}
}
как это можно портировать на с++?
Re[2]: Как портировать встроенный класс с java d c++
От:
Vamp
Дата: 20.08.09 14:29
Оценка:
S>Да приблизительно так и будет выглядеть...
Неправильно. Советую перед тем, как что-то советовать, компилировать
Да здравствует мыло душистое и веревка пушистая.
Re: Как портировать встроенный класс с java d c++
От:
Ovl
Дата: 20.08.09 14:30
Оценка:
wl.>как это можно портировать на с++?
нужно вручную отдать ссылку внутреннему классу
class a
{
int x = 10;
int get_x()
{
return x;
}
class b
{
a& _outer;
b(a& outer) : outer(_outer) {}
public int _get_x()
{
return a.get_x();
}
}
}
Re: Как портировать встроенный класс с java d c++
От:
Vamp
Дата: 20.08.09 14:37
Оценка:
Впрямую — никак. Вложенные классы не имеют прямого доступа к методам внешнего. Можно придумать что-то вроде этого:
class outer;
class inner {
outer* o;
public :
inner(outer* o_) : o(o_) {}
int get_x();
};
class outer {
inner in;
public :
outer() : in(this ) {}
int get_x() {return 5;}
};
int inner::get_x() {return o->get_x();}
Да здравствует мыло душистое и веревка пушистая.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить