boost :: function相似的类

时间:2011-12-17 12:37:39

标签: c++ boost boost-bind boost-function

我想实现一个类似于boost :: function的类函数,类函数可以在main.cpp中这样使用:

#include <iostream>
#include "Function.hpp"

int funct1(char c)
{
   std::cout << c << std::endl;
   return 0;
}

 int main()
 {
   Function<int (char)> f = &funct1;
   Function<int (char)> b = boost::bind(&funct1, _1);
   f('f');
   b('b');
   return 0;
 }

在我的Function.hpp中,我有

 template <typename T>
 class Function;

 template <typename T, typename P1>
 class Function<T(P1)>
 {
    typedef int (*ptr)(P1);
    public:

    Function(int (*n)(P1)) : _o(n)
   {
   }

   int           operator()(P1 const& p)
   {
     return _o(p);
   }

   Function<T(P1)>&      operator=(int (*n)(P1))
   {
     _o =  n;
     return *this;
   }

  private:
  ptr           _o; // function pointer
  };

上面的代码适用于函数f =&amp; funct1,
但它不适用于函数b = boost :: bind(&amp; funct1,_1);
我想知道如何完全提升::函数有效,我可以为我的函数支持boost :: bind

做些什么

1 个答案:

答案 0 :(得分:0)

我为类型擦除编写了示例程序:http://prograholic.blogspot.com/2011/11/type-erasure.html。在本文中我制作了示例类(不幸的是这篇文章是用俄语写的,但我认为代码示例可能对你有所帮助)