boost::function 和普通函数指针:不明确的重载

发布于 2024-09-08 14:07:11 字数 844 浏览 7 评论 0原文

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

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌能量女王 2024-09-15 14:07:11

不漂亮也不安全:

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

Not pretty and not safe:

foo.bar( static_cast<function<void(float)> >( &baz ) );
逆光下的微笑 2024-09-15 14:07:11

另一种选择:使用初始化程序

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

Another alternative: use Initializers.

foo.bar( function<void(float)>{ &baz } );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文