gpt4 book ai didi

C++ 从类 B 中运行类 A 的函数指针作为回调

转载 作者:行者123 更新时间:2023-11-28 03:14:57 25 4
gpt4 key购买 nike

我试图从另一个类中运行一个类的方法,我有一个基本的 GUI,让用户填写他的名字和密码,当它点击登录按钮时,另一个接管并处理事件,我我想在成功登录的情况下设置回调,但我在将函数指针发送到我的处理程序时遇到问题。

我做了一个我想做的事情的原始例子。

#include <iostream>

using namespace std;

class LoginHandler {
public:
void loginAttempt(bool result)
{
if(result == true)
{
cout << "Login success! W00t!" << endl;

//Run my callback :)
callback();
} else {
cout << "Login failed." << endl;
}
}

void setCallback(void (*cb)())
{
callback = cb;
}

private:
void (*callback)();
};

class Foo {
public:
void run()
{
LoginHandler* loginHandler = new LoginHandler();
loginHandler->setCallback(&Foo::sayHello);

loginHandler->loginAttempt(false);
loginHandler->loginAttempt(true);
}

void sayHello()
{
cout << "You actually logged in! Isn't that amazing!?" << endl;
}
};

int main()
{
Foo foo;
foo.run();

return 0;
}

我遇到下一个错误:

In member function 'void Foo::run()':
error: no matching function for call to 'LoginHandler::setCallback(void (Foo::*)())'
note: candidate is: void LoginHandler::setCallback(void (*)())
note: no known conversion for argument 1 from 'void (Foo::*)()' to 'void (*)()'

谢谢你的建议。

最佳答案

原始函数指针大多已过时,应仅用于低级性能关键的东西。对于我们其他人来说,C++ 拥有更好的 std::function。它可以轻松处理像您这样的案例。

如果您因为没有 C++11 编译器而无法使用它,boost::function 是一个替代品。

关于C++ 从类 B 中运行类 A 的函数指针作为回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17204107/

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