boost :: function и обычные указатели на функции: неоднозначная перегрузка - PullRequest
1 голос
/ 09 июля 2010

Учитывая следующую перегрузку функции-члена для получения различных функторов

class Foo { 
public: 
     void bar(boost::function<void(int)> func); 
     void bar(boost::function<void(float)> func); 
     void bar(boost::function<void(const std::vector<float>&)> func); 
}

и функции

void baz(float f) { std::cout << "float :" << f << std::endl; }

, тогда зачем брать простой указатель на функцию baz

Foo foo; 
foo.bar(&baz);

выдает эту ошибку:

error: call of overloaded ‘bar(void (*)(float))’ is ambiguous 
note: candidates are: void Foo::bar(boost::function<void(int)>) 
note: void Foo::bar(boost::function<void(float)>) 
note: void Foo::bar(boost::function<void(const std::vector<float, std::allocator<float> >&)>)

Как устранить эту неоднозначность?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2014

Другая альтернатива: используйте Инициализаторы .

foo.bar( function<void(float)>{ &baz } );
0 голосов
/ 06 апреля 2011

Не красиво и не безопасно:

foo.bar( static_cast<function<void(float)> >( &baz ) );
...