Boost :: Function как класс - PullRequest
       30

Boost :: Function как класс

1 голос
/ 17 декабря 2011

Я хотел бы реализовать класс Function, похожий на boost :: function, класс 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 = & funct1,
, но не может работать для функции b = boost :: bind (& funct1, _1);
Интересно узнать, как именно boost :: Функция работает и что я могу сделать для поддержки моей функции boost :: bind

1 Ответ

0 голосов
/ 22 декабря 2011

Я написал пример программы для стирания типа: http://prograholic.blogspot.com/2011/11/type-erasure.html. В этой статье я сделал пример класса (к сожалению, эта статья написана на русском языке, но я думаю, что примеры кода могут вам помочь)

...