分类: C/C++
2009-10-06 23:03:31
当然指想成员函数的指针,这里面的确有段C++设计的问题,C++的成员函数地址通过对象外去引用不能直接通过“&对象.方法”的方式来引用,这个在C++标准里面是没有的,很多人到这里就绝望了,可间接引用呢?而且用很优雅的方式来引用呢?
好了,我也不绕圈子了,给出我的代码,一个简单的 “成员模版函数指针” 的实现,看看C++是如何优雅的实现委托的,真的非常非常的优雅,由于完全自己摸索出来的,真是感慨万千啊。
#include "stdafx.h"
#include
using namespace std;
template
class A
{
private:
typedef int (T::*delegateFun)(int);
T * _This;
delegateFun _deleGate;
public:
//This被代理的对象, delegateFun被代理的方法
A(T * This, int (T::*delegateFun)(int))
{
_This = This;
_deleGate = delegateFun;
}
//c被代理的参数
int execue(int c)
{
return (_This->*_deleGate)(c);
}
};
class B
{
public:
int FunA(int a) {return a + 10;}
int FunB(int a) {return a - 10;}
B()
{
}
};
int _tmain(int argc, _TCHAR* argv[])
{
B *objB = new B();
A delegateObj1(objB, (&B::FunA));
A delegateObj2(objB, (&B::FunB));
cout << delegateObj1.execue(10) <
return 0;
}
看完了感觉如何?以后想要设计一个callback回调函数是否明朗了许多?
再也不需要强行搞个static约束方法,那么恶心的东西了吧
chinaunix网友2009-12-21 13:27:09
问题在于,有时候我们设计一个库,往往实现不知道用户传递进来的typename,所以还可以这样写:
class A {
public:
typedf (void)(*pfn)(LPVOID this) fn_handler;
template