我为字符串处理定义了以下函数:
void sub(const std::string & repl){
}
void sub(std::function<std::string()> userfun){
}
当我使用匿名函数调用时,没关系
sub([=](){return "a"; });
但是当我用字符串调用时,它失败了
sub("a");
错误C2668:'sub':对重载函数的模糊调用
使用字符串对抗匿名函数参数
进行调用时是否可以避免模糊调用使用Visual C ++ 2013
UPDATE2
创建一个新的控制台项目并将所有内容放在草图中,但在VC ++ 2013中仍然失败
// overload.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string>
#include <functional>
void sub(const std::string & repl) {
}
void sub(std::function<std::string()> userfun) {
}
int _tmain(int argc, _TCHAR* argv[])
{
sub("a");
return 0;
}
1>------ Build started: Project: overload, Configuration: Debug Win32 ------
1>Build started 2016-06-22 17:55:00.
1>InitializeBuildStatus:
1> Touching "Debug\overload.tlog\unsuccessfulbuild".
1>ClCompile:
1> overload.cpp
1>c:\users\xxxxxx\documents\visual studio 2013\projects\overload\overload\overload.cpp(15): error C2668: 'sub' : ambiguous call to overloaded function
1> c:\users\xxxxxx\documents\visual studio 2013\projects\overload\overload\overload.cpp(10): could be 'void sub(std::function<std::string (void)>)'
1> c:\users\xxxxxx\documents\visual studio 2013\projects\overload\overload\overload.cpp(7): or 'void sub(const std::string &)'
1> while trying to match the argument list '(const char [2])'
1>
1>Build FAILED.
1>
答案 0 :(得分:3)
这是一个编译器错误:notepad.callback(highlight_preprocessor, [NOTIFICATION.FILEBEFORESAVE])
是一个适当的解决方法。 (将匿名临时绑定到sub(std::string("a"));
引用在C ++中是合法的。)
MSVC2013编译语句
const
显示std::function<std::string()> foo("a");
是该类型的有效构造函数参数。 (它似乎错误地使用了构造函数"a"
)。
参考:http://en.cppreference.com/w/cpp/utility/functional/function/function