函数及类成员函数回调模板化
来源:互联网 发布:淘宝男模特啥要求 编辑:程序博客网 时间:2024/06/13 00:43
///////////////////////////////////////////////////
// 作者:黄崇 潘鹏
// 时间:2010-11-29
// 功能:回调模板化
// 转载请注明出处,谢谢
///////////////////////////////////////////////////
//
// 使用方法
/*
class A
{
public:
BOOL A_test(int a)
{
if (a > 0)
{
printf("%d > 0/n", a);
return TRUE;
}
printf("%d < 0/n", a);
return FALSE;
}
};
class B
{
private:
CallbackObject<BOOL, int>* m_pCallback;
public:
B()
{
m_pCallback = NULL;
}
void SetCallback(CallbackObject<BOOL, int>* pCallback){ m_pCallback = pCallback; }
void B_test(int a)
{
if (m_pCallback)
m_pCallback->call(a);
}
};
void main()
{
A a;
B b;
CallbackObject<BOOL, int>* pCallback = BindCallback(&a, &A::A_test);
b.SetCallback(pCallback);
b.B_test(2);
delete pCallback;
}
*/
#ifndef _PPCALLBACK_
#define _PPCALLBACK_
template<typename R, typename V>class CallbackObject
{
public:
virtual ~CallbackObject(){}
virtual R call(V val) = 0;
};
template<typename R, typename V>class CallbackFunction : public CallbackObject<R, V>
{
public:
explicit CallbackFunction(R(*function)(V)){ m_function = function; }
virtual R call(V val){ return (*m_function)(val); }
protected:
R (*m_function)(V);
};
class CallbackException
{
};
template<typename R, typename O, typename V>class CallbackMemberFunction : public
CallbackObject<R, V>
{
public:
explicit CallbackMemberFunction(O* pObject, R(O::*function)(V))
{
m_pObject = pObject;
m_function = function;
}
virtual R call(V val)
{
if (m_pObject == 0)
throw CallbackException();
return (m_pObject->*m_function)(val);
}
protected:
O* m_pObject;
R (O::*m_function)(V);
};
template<typename R, typename V>CallbackObject<R, V>* BindCallback(R(*function)(V))
{
return new CallbackFunction<R, V>(function);
}
template<typename R, typename O, typename V>CallbackObject<R, V>* BindCallback(O* pObject,
R(O::*function)(V))
{
return new CallbackMemberFunction<R, O, V>(pObject, function);
}
- 函数及类成员函数回调模板化
- 类模板成员函数
- <类模板 的 成员函数的特化>及<类 的 成员模板函数的特化>
- 类模板的成员函数及类的成员模板函数的特化
- 类模板示例及类中成员函数的模板化
- 类模板示例及类中成员函数的模板化
- 类模板成员函数的实例化
- 栈(stack)的模板类及成员函数的实现
- 传递模板类的成员函数指针及static成员函数
- 类模板的成员函数
- c++类成员函数模板
- 类成员函数作为模板
- 类模板的成员函数
- C++ 类模板成员函数
- 类模板的成员函数模板写法
- 成员函数模板
- 成员函数模板
- 成员函数模板
- IDAL接口的设计
- 报表文章
- 数据库中索引的优缺点
- linux date命令设置系统时间的方法
- oracle----NC开发 自增列处理
- 函数及类成员函数回调模板化
- oracle----NC开发 自增列处理
- try catch
- 好资料
- 单片机学习
- VIM 打开 Unicode、UTF-8 等编码文件的乱码问题
- C++期末作业
- C# 实例 -------单例模式
- dd配置