Следующий код даст компилировать ошибку, вызванную линии 17:двойной импульс :: связывают причины компиляции ошибки
#include <boost/bind.hpp>
#include <boost/function.hpp>
void func()
{}
class A{
public:
template <typename T>
static void foo(T const& arg){}
template <typename T>
void bar(T const& arg){
boost::bind(&A::foo<T>, arg); //OK
boost::function<T> functor1 = boost::bind(func); //OK
boost::function<T> functor2 = boost::bind(&A::foo<T>, arg); //ERROR, LINE 17
}
};
int main()
{
A obj1;
obj1.bar(func);
}
Вопрос заключается в том, какого Protoype из functor2 в строке 17 должно быть?
Если я действительно хочу, чтобы прототип functor2, чтобы быть «повышение :: функцию < пустоту() >, как сделать повышение :: привязки возврата такого типа
Ошибка компиляции: usr/include/boost/bind/bind.hpp:253: error: invalid initialization of reference of type 'void (&)()' from expression of type 'void (*)()'
Что это значит?
Попытка наддува :: Функция <аннулируются (Т & Const)> functor2 = повышение :: связывания (& A :: Foo, Arg); –
Lou
Это не работает. потому что T уже «void (*)()». –