据我所知,有两种方法实现一个类的成员函数作为回调函数。
1. 成员函数为static方法。
2. 用bind和function绑定一个非静态成员的方法。
代码示例如下:
1. 成员函数为static方法。
2. 用bind和function绑定一个非静态成员的方法。
代码示例如下:
#pragma once
#include <iostream>
#include <memory>
#include <functional>
class CMyTest
{
public:
CMyTest(void)
{
// 设置静态成员函数作为回调函数
SetCallBack(CMyTest::static_method);
// 设置成员变量作为回调函数
SetCallBack(std::tr1::bind(&CMyTest::normal_method, this));
}
~CMyTest(void){};
typedef void(*FUNC)(void);
typedef std::tr1::function<void(void)> FUNC2;
// 静态成员方法
static void static_method(void)
{
std::cout<<"This is a static method!"<<std::endl;
}
// 普通成员方法
void normal_method(void)
{
std::cout<<"This is a normal method!"<<std::endl;
}
void SetCallBack(FUNC pFunc)
{
m_pFunc = pFunc;
}
void SetCallBack(FUNC2 pf)
{
m_pFunc2 = pf;
}
// 回调方法调用
void DoCallBack()
{
(*m_pFunc)();
m_pFunc2();
}
private:
FUNC m_pFunc;
FUNC2 m_pFunc2;
};
void main()
{
CMyTest myTest;
myTest.DoCallBack();
}