给出以下成员函数重载以采用各种函子
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> >&)>)
如何解决这种歧义?
答案 0 :(得分:0)
不漂亮且不安全:
foo.bar( static_cast<function<void(float)> >( &baz ) );
答案 1 :(得分:0)
另一种选择:使用Initializers。
foo.bar( function<void(float)>{ &baz } );