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


     

  • 相关阅读:
    05_XML的解析_01_dom4j 解析
    04_SSM框架整合(Spring+SpringMVC+MyBatis)
    03_入门程序(注解方式,掌握)
    02_入门程序(非注解方式,了解)
    01_SpringMVC流程架构图
    21_resultMap和resultType总结
    20_高级映射:多对多查询
    inline函数的总结
    【C++】C++函数重载的总结
    优先队列
  • 原文地址:https://www.cnblogs.com/mrfangzheng/p/1766707.html
Copyright © 2020-2023  润新知