c++中的回调函数

callback function in c++

本文关键字:函数 回调 c++      更新时间:2023-10-16

代码描述了两个实现回调函数的类,该函数必须是传入模板的类参数中的成员函数。在代码下面,我附上了我得到的相关事件错误消息。

a.h

template <class CLASSNAME>
class a
{
public:
    typedef void (CLASSNAME::*myFunction)();
    a(CLASSNAME& myObject, myFunction callback) :
    m_myObject(myObject)
    {
        m_myFuntion = callback;
    }
    void update()
    {
        (m_myObject).*(m_myFuntion);
    }
    myFunction m_myFuntion;
    CLASSNAME& m_myObject;
};

伪.h

#include <stdio.h>
class dummy
{
public:
    dummy()
    {
        var = 14;
    }

    void func()
    {
        printf("func!!");
    }
    int var;
};

main.cpp

#include <cstdlib>
#include "a.h"
#include "dummy.h"

void main()
{
    dummy dum;
    a<dummy> avar(dum, &(dummy::func));
    avar.update();
    system("pause");
}

我正在尝试实现回调函数,并收到以下错误消息:

C2298 missing call to bound pointer to member function  

问题出在哪里?

你有很多括号,它们只是不在正确的位置。调用指向成员函数的指针的正确语法是:

void update()
{
    (m_myObject.*m_myFuntion)();
}

您在错误的地方使用了括号:

此:

 a<dummy> avar(dum, &(dummy::func));

应该是这样的:

 a<dummy> avar(dum, &dummy::func);

这个:

(m_myObject).*(m_myFuntion);

应该是:

(m_myObject.*m_myFuntion)();

实例