我有一个嵌套在基类中的类,如下所示:
class Base {
public:
void methodB() { std::cout << "method B"; }
class Nested {
public:
void methodA() { methodB(); }
};
Nested * member;
};
这显然会产生编译器错误:
Cannot call member function methodB without object
因为
methodB
没有声明为静态。这基本上可以,因为methodB将通过执行instanceOfBase.member->methodA()
来调用,而this
随后将调用methodB,但是我遇到的问题是我不知道如何从其成员对象访问指向instanceOfBase
的基础ojit_code指针。 最佳答案
嵌套类的对象不会无意链接到嵌套其定义的类的对象。请考虑以下类似的事情:
Base::Nested{}.methodA()
将对哪个
Base
对象进行操作?如果您对
Nested
对象始终包含在Base
对象中有一些不变性,则必须维护该链接。例如,您可以将Base
对象的this
指针传递给Nested
的构造函数中Base
对象的构造函数:class Base {
public:
class Nested {
public:
Nested(Base* owner) : owner{owner} {}
void methodA() { owner->methodB(); }
Base* owner;
};
Base() : member{this} {}
void methodB() { std::cout << "method B"; }
Nested member;
};
Live Demo
关于c++ - 您如何从嵌套类的方法中获得基类的 “this”指针?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60086538/