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);