Функция с шаблонами и бустом
Я пытаюсь написать функтор для вызова функции повышения с помощью bind и некоторого шаблона. Итак, у меня есть это главное:
int function(char c)
{
std::cout << c << std::endl;
return (0);
}
int main()
{
Function<int (char)> fb = boost::bind(&function, _1);
fb('c');
return (0);
}
и это мой класс Function
:
template<typename F>
class Function
{
private:
F functor;
public:
Function()
{
this->functor = NULL;
};
Function(F func)
{
this->functor = func;
};
template <typename P>
void operator()(P arg)
{
(*this->functor)(arg);
};
void operator=(F func)
{
this->functor = func;
};
};
у меня есть проблема: когда я пытаюсь скомпилировать, у меня есть эти ошибки:
error C2440: 'initializing' : cannot convert from 'boost::_bi::bind_t<R,F,L>' to 'Function<F>'
IntelliSense: no suitable user-defined conversion from "boost::_bi::bind_t<int, int (*)(char), boost::_bi::list1<boost::arg<1>>>" to "Function<int (char)>" exists
Кто-то может мне помочь?
1 ответ
Решение
boost::bind
вернет что-то неуказанное, но конвертируемое вboost::function
, У вас нет причин иметь свой собственныйfunction
учебный класс.
Посмотрите на этот простой пример:
#include <boost/bind.hpp>
#include <boost/function.hpp>
int func(char) { return 23; }
int main()
{
boost::function<int(char)> bound = boost::bind(func, _1);
return 0;
}
Что это unspecified
тип возврата значит для твоего случая? Вам нужно стереть тип Function
и нужно написать что-то под названием AnyFunction
, Зачем? Потому что вы никогда не сможете разобрать тип аргумента шаблона Function
в C++03 (и даже в C++11, например, для принятия только определенного типа в качестве аргумента функции).