模糊调用(从char *转换为lambda vs std :: string)

时间:2011-08-21 18:17:08

标签: c++ c++11

根据我的编译器gcc-4.6,下面示例中对func的调用是不明确的。

void func(const std::string &str) {
}

void func(std::function<std::string()> f) {
}

void test() {
    func("Hello");
}

编译器说这个是正确的吗?如果我删除第一个重载,则此代码将无法编译,因为它将无法实例化所涉及的模板。

除了重命名两个函数之一或显式转换为std :: string之外,还有解决方法吗?

2 个答案:

答案 0 :(得分:4)

SFINAE可以在std::function的构造函数中解析它。但是,它似乎并不是必需的,也不是GCC提供的。所以你不能依赖它来解决它。

答案 1 :(得分:3)

您还可以添加第三个重载以显式捕获字符串文字大小写:

void func(char const* cstr) {
    return func(std::string(cstr));
}