Я хотел бы реализовать класс 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