1.需要头文件#include <functional>
2.定义functor变量 :
std::tr1::function< T* (P1*, P2*) > DpdCreateT;
BCB可以先typedef一下函数声明
typedef T* (Delegate)(P1*, P2*);
std::tr1::function< Delegate > DpdCreateT;
3.连接:
类函数
xx.DpdCreateT = std::tr1::bind(
& ZZZ::CreateConnection, //类函数地址
& instance, // 对象实例地址
std::tr1::placeholders::_1, // 参数1占位符
std::tr1::placeholders::_2 // 参数1占位符
);
全局函数,直接赋值即可
xx.DpdCreateT = GlobalCreateFunction;
//------------------------------------------------------------------------------
简单函数指针
typedef void (*FooPtr)(int, double);
void Foo(int anInt, double aDouble)
{
std::cout<<"Foo() = "<<anInt<<", "<<aDouble<<endl;
}
FooPtr func = &Foo;
(*func)( 1, 2.0 );
//------------------------------------------------------------------------------
成员函数指针
typedef int (SomeClass::*MemberFooPtr)(int, double);
MemberFooPtr p;
SomeClass sc;
p = &SomeClass::Foo;
(sc.*p)(1, 2);
//-------------------------------------------------------------------------------
VS 2008中
#include <functional>
定义:
typedef void (SetFrameValueActionDelegate)(T*, V frameValue);
std::tr1::function<SetFrameValueActionDelegate> SetFrameValueAction;
绑定:
mWeekViewGroupLocationAnimation.SetFrameValueAction
= std::tr1::bind( &MyClass::mWeekViewGroup_LocationAnimation_SetFrameValue,
&mRenderGroupWeekView,
std::tr1::placeholders::_2);