boost :: function和plain函数指针:模糊的重载

时间:2010-07-09 00:57:10

标签: function-pointers overloading functor boost-function

给出以下成员函数重载以采用各种函子

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 :(得分:0)

不漂亮且不安全:

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

答案 1 :(得分:0)

另一种选择:使用Initializers

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