次のメンバー関数のオーバーロードが与えられ、さまざまなファンクターを取得します
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> >&)>)
このあいまいさを解決する方法は?