我的問題代碼: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