捕获子类内部的变量?

问题描述

| 我想知道这样的事情是否可能。也许使用模板和技巧? 我现在要强制执行的唯一规则是,您不允许在类栏中使用构造函数(因此,您不能将引用或指针传递给foo或a)。
class Foo{
    int a;
public:
    struct Bar{
        int barme(){ return a; }
    };
};
我知道一个问题是bar如何知道要使用哪个foo实例?我不知道,但我希望foo具有许多Bar类,然后再有一个foo,而每个foo都将具有一个以上的bar。 我确定我在某个地方(也许用另一种语言)看到了一个把戏,但我不知道在哪里。我确实记得使用编译时间const的模板,但是在这种情况下foo不会是编译时间,尽管它的ptr / ref可能是     

解决方法

        在C ++中,嵌套类只是类。它与Java不同,在Java中,嵌套类附带了父类的实例。因此,不可能做到这一点。您必须传递
Foo
的实例才能在
Bar
内进行操作。 (例如,
std::vector::iterator
不带有
std::vector
,它是一个完全独立的类型)     ,        提出一个怪异的问题,得到一个怪异的答案(这本来是卑鄙的态度,而不是对您的挑剔):
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();
    ,        在C ++中,将一个类嵌套在另一个类中仅意味着名称被嵌套,而不意味着实例被嵌套。换句话说,如果您有A类和B类,例如:
class A { 
    class B { 
        // whatever
    };
};
然后,嵌套在A内的B仅影响所涉及名称的可见性,而不影响如何创建二者的实例-例如,您可以创建
A::B
,而不必创建
A
实例。