Ich versuche, einen überladenen Funktionszeiger übergeben, wie unten im Beispielcode gezeigt.C++ überladen Funktion Zeiger Ambiguität
class Sample
{
uint32_t method(char* input1, double input2);
uint32_t method(double input1);
}
template<class T, class... Args)
void processInput(T &&t, Args&&... a)
{
std::packaged_task<uint32_t(Args...)> task(std::bind(t, a...));
// other processing
}
// Caller invokes the below API
Sample* obj = new Sample();
processInput(static_cast<uint32_t(*)(double)>(&Sample::method), &*obj, 2.0f);
Dieser Code wird jedoch nicht kompiliert. Es beschwert sich, dass es nicht feststellen kann, welche Instanz der überladenen Funktion beabsichtigt ist. Ich verweisen einige Beispiele:
http://en.cppreference.com/w/cpp/language/static_cast
Kann jemand Hilfe bei dem Hinweis auf, was hier schief geht?
Shoudln't 'static_cast' 'sein static_cast ' da es eine Member-Funktion? –
NathanOliver
@pree Korrigieren Sie Ihre Tippfehler (fehlende ';', ')' anstelle von '>'). Die Funktion gibt auch nicht "double" zurück. – LogicStuff
Das war es! Ich habe die Implementierung von static_cast beim Überladen von Funktionen nicht wirklich verstanden und machte es falsch! Danke @NathanOliver & LogicStuff. – pree