zoukankan      html  css  js  c++  java
  • 在C++中使用tr1实现functor/函数指针/成员函数指针

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


     

  • 相关阅读:
    什么是 bean 的自动装配?
    什么是 Spring 的内部 bean?
    什么是 Spring 的 MVC 框架?
    Spring AOP and AspectJ AOP 有什么区别?
    解释 JDBC 抽象和 DAO 模块?
    volatile 类型变量提供什么保证?
    一个 Spring Bean 定义 包含什么?
    什么是 Spring MVC 框架的控制器?
    使用 Spring 访问 Hibernate 的方法有哪些?
    什么是 Callable 和 Future?
  • 原文地址:https://www.cnblogs.com/mrfangzheng/p/1766707.html
Copyright © 2011-2022 走看看