mrfangzheng

Hope and fear are useless. Be confident, and always be prepared for the worst.
  首页  :: 新随笔  :: 联系 :: 管理

在C++中使用tr1实现functor/函数指针/成员函数指针

Posted on 2010-06-28 14:25  mrfangzheng  阅读(793)  评论(0编辑  收藏  举报

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