I definiert folgende Funktionen zur String-Verarbeitung:C++ Funktion für String-Referenz Überlastung verwirrend und anonyme Funktion
void sub(const std::string & repl){
}
void sub(std::function<std::string()> userfun){
}
Wenn ich mit einer anonymen Funktion aufrufen, ist es OK
sub([=](){return "a"; });
Aber wenn ich rufe mit Schnur, hat es
sub("a");
fehlgeschlagen
error C2668: 'sub' : ambiguous call to overloaded function
Ist es möglich, mehrdeutig Aufruf zu vermeiden, wenn sie mit einer Schnur gegen anonyme Funktionsparameter
mit Visual C++ 2013
UPDATE2
Erstellen Sie ein neues Konsolenprojekt und setzen every von Skizze und noch immer nicht Aufruf in 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>
UPDATE: Meine VS über Informationen:
'sub (Zeichenfolge ("a"));' 'oder/* const */string a ("a"); Sub (a);/* skope leak */' –
@MohitJain dies ist ein möglicher Weg, aber nicht freundlich für den Benutzer, ich hoffe," die "Definition der Funktion zu beheben, um das gleiche Ergebnis zu erreichen – Boying
kann nicht reproduzieren in http: // webcompiler.cloudapp.net/ –