我有一个嵌套在基类中的类,如下所示:

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/

10-16 04:40