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> >&)>)
如何解决这种歧义?
Given the following member function overload to take various functors
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);
}
and the function
void baz(float f) { std::cout << "float :" << f << std::endl; }
then why does taking the plain function pointer of baz
Foo foo;
foo.bar(&baz);
yield this error:
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> >&)>)
How to resolve this ambiguity ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不漂亮也不安全:
Not pretty and not safe:
另一种选择:使用初始化程序。
Another alternative: use Initializers.