Задайте странный вопрос, получите странный ответ (это должно быть плечевой кость, а не копать в вас):
class Foo{
int a;
public:
struct Bar{
Foo* this_;
int barme(){ return this_->a; }
};
};
Смотри, мама, не конструктор!
Foo foo;
Foo::Bar bar = { &foo };
bar.barme();
вам НЕ разрешено использовать конструктор в строке классов (поэтому вы не можете передать ссылку или указатель на foo или a).
Но я только что сделал! Или ты имел в виду, что я не могу? Отлично!
class Foo{
int a;
public:
static Foo* nothing_to_see_here;
Foo()
{ nothing_to_see_here = this; }
struct Bar{
int barme(){ return nothing_to_see_here->a; }
};
};
Смотри, мама, ничего не пропущено!
Foo foo;
Foo::Bar bar;
bar.barme();
Или вы имели в виду что-то похожее на замыкания?
// C++0x up in this
#include <functional>
class Foo{
int a;
public:
std::function<int()>
bar()
{ return [=] { return a; }; }
};
Никаких пропусков в конструкторе или обмане * любого рода, гарантировано **!
Foo foo;
auto me = foo.bar();
me();