gpt4 book ai didi

c++ - 具有不同类的类函数的函数指针数组

转载 作者:行者123 更新时间:2023-11-30 05:05:26 25 4
gpt4 key购买 nike

SomeClass.h

class SomeClass{
public:
static std::vector<void (*)()> UpdateFuncs;
}

OtherClass.h

class OtherClass{
private:
void Update();
public:
OtherClass();
}

OtherClass.cpp

OtherClass::OtherClass(){
Time::UpdateFuncs.push_back(&(this->Update));
}

在 Build 上,我得到 '&': illegal operation on bound member function expression如果我这样做:

.push_back(&Update);

然后我得到“没有重载函数的实例

std::vector<_Ty, _Alloc>::push_back [with _Ty=void (*)(), _Alloc=std::allocator]" matches the argument list"

提前致谢

最佳答案

OtherClass::Update 不适合 void (*)() 函数指针,因为它是非静态成员函数;就好像它有一个“不可见的”OtherClass* 参数。

使用 std::function 实现您的目标:

#include <functional>

class Time
{
public:
static std::vector<std::function<void()>> UpdateFuncs;
};

在 OtherClass.cpp 中,使用 this 捕获 lamba 作为函数对象:

OtherClass::OtherClass()
{
Time::UpdateFuncs.push_back([this] { Update(); });
}

当然,如果您将 Update 设为静态,那么如果您愿意,您仍然可以使用 void (*)(),因为“不可见”参数是已删除,但 std::function 只是安全且现代的方式。

关于c++ - 具有不同类的类函数的函数指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48367074/

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