是否有可能在C++中的静态成员方法中调用非静态成员方法?

Ant*_*ony 0 c++ static-methods

我怀疑这是可能的,但值得一提的是:我想从静态成员函数中调用非静态成员函数.我想为班级的每个当前实例做这件事.可能吗?

当我在测试类中尝试这个时,我收到以下错误:

"无法调用成员函数'void TestClass :: NonStaticMethod()'没有对象"

Ker*_* SB 5

你可以用一些技巧来做到这一点.如果要跟踪所有实例,则必须在类构造时注册实例.当然,这很难做到,但这是一个粗略的方法:

class Foo
{
    static std::unordered_set<Foo*> instances;

    void do_it();  // non-static member function

public:
    Foo()
    {
        instances.insert(this);
        // ...
    }

    // add copy constructor, move constructor, etc.

    ~Foo()
    {
        instances.erase(this);
        // ...
    }

    static void call_all()
    {
        for (Foo * p : instances) { p->do_it(); }
    }
};
Run Code Online (Sandbox Code Playgroud)

您必须确保所有构造函数都执行注册.