Ich versuche, eine Funktion zu implementieren, die eine std::function
nimmt, die ein It zurückgibt und eine beliebige Anzahl von Parametern erhalten kann.C++ 11 Funktionssignatur mit variadic Std :: Funktion
Ich habe Folgendes versucht, aber es kompiliert nicht und ich kann nicht verstehen, was der Fehler bedeutet.
template <typename ...Args>
void ThrowOnError(std::function<int(Args...)> func, Args... args)
{
int err = func(args...);
if (err < 0)
throw std::exception();
}
int f()
{
return 42;
}
int f(int x)
{
return x;
}
int main()
{
ThrowOnError(f);
ThrowOnError(f, 1);
}
Ich versuchte, die Templat-Funktion zu bewegen, um Header aber es hat nicht funktioniert, auch wenn ich die f(int x)
Funktion kommentieren und nur mit nur f
den Anruf verlassen, habe ich noch einen bekommen no matching overloaded function found
und 'void ThrowOnError(std::function<int(Args...)>,Args...)': could not deduce template argument for 'std::function<int(Args...)>' from 'int (int)'
Was ist das Problem hier? Was fehlt mir in der Funktion?
P. - Ich möchte eine Antwort, die eine std::function
, wenn möglich, und nicht einen weiteren Typnamen für den Funktor Typ.
OK, aber dies mit einem nicht funktioniert 'typename F, typename ... Args 'auch. Wie kann es erreicht werden? – ZivS
@ZivS Weitere Details hinzugefügt. – skypjack
danke für die Antwort. In Bezug auf Ihre Bearbeitung: http://english.stackexchange.com/questions/1016/do-you-use-a-or-before-acronyms – ZivS