gpt4 book ai didi

c++ - 是否可以在 C++ 中的静态成员方法中调用非静态成员方法?

转载 作者:太空宇宙 更新时间:2023-11-04 15:08:01 24 4
gpt4 key购买 nike

我怀疑这是可能的,但值得一问:我想从静态成员函数内部调用非静态成员函数。我想为该类的每个当前实例都这样做。可能吗?

当我在测试类中尝试此操作时,出现以下错误:

“不能在没有对象的情况下调用成员函数‘void TestClass::NonStaticMethod()’”

最佳答案

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

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(); }
}
};

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

关于c++ - 是否可以在 C++ 中的静态成员方法中调用非静态成员方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9346752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com