gpt4 book ai didi

C++ 如何将成员函数指针传递给另一个类?

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

这是我想实现的:

class Delegate
{
public:
void SetFunction(void(*fun)());
private:
void(*mEventFunction)();
}

然后是名为Test的类

class Test
{
public:
Test();
void OnEventStarted();
}

现在在 Test() 中,我想像这样将 OnEventStarted 传递给 Delegate:

Test::Test()
{
Delegate* testClass = new Delegate();
testClass->SetFunction(this::OnEventStarted);
}

但是OnEventStarted是一个非静态成员函数,怎么办?

最佳答案

为了调用成员函数,您需要指向成员函数的指针和对象。但是,鉴于该成员函数类型实际上包括包含该函数的类(在您的示例中,它将是 void (Test:: *mEventFunction)(); 并且只能与 Test 成员一起使用,更好的解决方案是使用 std::function 。这就是它的方式看起来像:

class Delegate {
public:
void SetFunction(std::function<void ()> fn) { mEventFunction = fn);
private:
std::function<void ()> fn;
}

Test::Test() {
Delegate testClass; // No need for dynamic allocation
testClass->SetFunction(std::bind(&Test::OnEventStarted, this));
}

关于C++ 如何将成员函数指针传递给另一个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37791121/

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