我的问题代码:C++超载:字符串常量与升压::功能歧义
#include <string>
#include <boost/function.hpp>
void func (const std::string&) {}
void func (const boost::function<void()>&) {}
int main() {
func (main); // good
func ("bad");
return 0;
}
=>
error: call of overloaded ‘func(const char [4])’ is ambiguous
overload.cpp:4: note: candidates are: void func(const std::string&)
overload.cpp:5: note: void func(const boost::function<void()()>&)
我知道我可以通过显式调用FUNC(字符串(解决这个“坏“));或者通过提供一个func(const char *),但我想知道是否有一种方法来保持调用者方面的例子,并且不会引入更多的重载。
也许用boost :: enable_if做些什么? 感谢您的任何提示。
你真的认为原因是需要`boost :: function`的重载,你有没有尝试编译没有超载?这会工作吗? – Nim 2011-01-21 09:56:33
是由boost :: function引起的。我发布的例子重现了整个情况。 – denis 2011-01-21 10:04:52
是啊 - 没有测试之前询问,只是有点困惑,这是这种情况 - 看起来像它是..嗯..缺少提供超负荷的一切,不知道有一个整洁的解决方案... – Nim 2011-01-21 10:18:43