根据我的编译器gcc-4.6,在下面的例子中调用func是模棱两可的
void func(const std::string &str) {
}
void func(std::function<std::string()> f) {
}
void test() {
func("Hello");
}
编译器这样说正确吗?如果我移除第一个重载,这段代码将无法编译,因为它将无法实例化所涉及的模板。
除了重命名两个函数之一或显式转换为std::string之外,是否有其他方法可以解决这个问题?
可以在std::function
的构造函数中使用SFINAE进行解析。然而,它似乎不是必需的,也不是GCC提供的。所以你不能完全依赖于它的运行
您还可以添加第三个重载来显式捕获字符串文本大小写:
void func(char const* cstr) {
return func(std::string(cstr));
}