Wrap überladene Funktion über Std :: Funktion

8

Ich habe eine überladene Funktion, die ich in einer std :: -Funktion übergeben möchte. GCC4.6 findet keine "Matching-Funktion". Während ich hier einige Fragen fand, sind die Antworten nicht so klar, wie ich sie gerne hätte. Könnte mir jemand sagen, warum der folgende Code die korrekte Überladung nicht abziehen kann und wie man (elegant) damit umgehen kann?

%Vor%     
abergmeier 11.04.2012, 17:35
quelle

1 Antwort

17

Das ist mehrdeutige Situation.

Um es zu disambiguieren, verwenden Sie explizite Umwandlung als:

%Vor%

Nun wäre der Compiler in der Lage, die Situation basierend auf dem Typ in der Besetzung zu disambiguieren.

Oder Sie können dies tun:

%Vor%

Warum funktioniert std::function<int(const std::string&)> nicht so, wie funtype fun = test oben funktioniert?

Nun, die Antwort ist, weil std::function mit jedem Objekt initialisiert werden kann, da sein Konstruktor templated ist, was unabhängig von dem Template-Argument ist, das Sie an std::function übergeben haben.

    
Nawaz 11.04.2012, 17:39
quelle

Tags und Links