Aufgrund meiner vorherigen Frage hier Variadic template, function as argumenteine variadische Template-Funktion mit einer Elementfunktion
Aufruf habe ich unten mit einer einfachen Klasse endete, aber wie verwende ich std :: aufrufen oder eine andere Methode Tester zu nennen: : Test mit Tester :: einfach als Argument? Die Beispiele, die unter http://en.cppreference.com/w/cpp/utility/functional/invoke#Example zur Verfügung gestellt wurden, waren nicht sehr hilfreich für mich und ich versuchte viele verschiedene Arten, std :: invoke zu verwenden.
class Tester {
public:
template<typename F, typename... Args>
decltype(auto) test(F&& f, Args&&... args) {
return std::forward<F>(f)(std::forward<Args>(args)...);
}
int simple(int i) { return i; }
};
int main()
{
Tester t;
std::cout << t.test(t.simple, 3); // how do you modify this line such that the code compiles?
}
Vielen Dank!
Es ist jetzt nicht kompatibel mit Nichtmitgliedsfunktionen. Versuchen Sie 't.test (puts," Hallo! ")'. –
@HenriMenke ja, genau. Soweit ich das verstehe, interessiert sich OP in dieser Frage für den Umgang mit Mitgliedsfunktionen. Also habe ich eine einfache Lösung für die Member-Funktion hinzugefügt. Nun kann OP Lösungen aus beiden Fragen kombinieren, um die gewünschte Funktionalität zu erreichen. Oder benutzen Sie einfach 'std :: invoke', wenn sein Compiler es ihm erlaubt :) –