您的位置:首页 > 其它

如何定义和实现一个类的成员函数为回调函数?

2013-10-18 14:33 381 查看
据我所知,有两种方法实现一个类的成员函数作为回调函数。

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: