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

Eel*_*lke 5 c++ c++11

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

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

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

void test() {
    func("Hello");
}
Run Code Online (Sandbox Code Playgroud)

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

无论如何要解决这个问题,要么重命名两个函数之一,要么显式转换为std :: string?

Chr*_*ung 3

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

void func(char const* cstr) {
    return func(std::string(cstr));
}
Run Code Online (Sandbox Code Playgroud)