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

标签 c++ pointers callback

我试图从另一个类中运行一个类的方法,我有一个基本的 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/

相关文章:

c++ - 有没有办法将 cin.fail 和 cin.clear 翻译成 C 编程语言?

c++ - 获取临时 SDL_Rect 的地址

c - C中通过指向指针的指针从结构体中获取值

json - 为 Alamofire 创建回调,我可以用它来操作 JSON

Node.js - 如何使用回调调用异步函数?

c++ - 获取所有 Windows 内核对象及其安全权限

c++ - 构造函数不能是虚拟的

c++ - 如何正确等待线程中的信号

c - 指针前/后增量

php - 存储为成员变量的调用回调