Da ich die undefined Funktion vorging:Wie kann ich Übergeben Sie eine nicht definierte Methode wie ein nicht definiert Funktion
void foo(char, short);
I learned how die Art tuple
der Argumente zu erhalten, indem decltype(m(foo))
mit dieser Funktion aufrufen:
template <typename Ret, typename... Args>
tuple<Args...> m(Ret(Args...));
ich möchte nun eine undefined Methode zu übergeben:
struct bar { void foo(char, short); };
ich versucht hatte, m
wie Umschreiben:
template <typename Ret, typename C, typename... Args>
tuple<Args...> m(Ret(C::*)(Args...));
Aber wenn I try to call this in ähnlicher Weise mit decltype(m(bar::foo))
ich den Fehler:
invalid use of non-static member function
void bar::foo(char, short int)
Wie kann ich diese Methode übergeben, wie ich für die Funktion haben ?
Denken Sie daran, dass ein nicht-statisches Element Funktionszeiger eine Instanz seiner Klasse (ein Objekt), auf dem muss arbeiten . Eine Möglichkeit, Elementfunktionszeiger mit einem Objekt zu übergeben, ist die Funktion std :: function. Siehe das 'print_add' Beispiel: http://en.cppreference.com/w/cpp/utility/functional/function –
@RichardCritten Beachten Sie die" ** undefined ** Funktion "und" ** undefined ** Methode "' Funktion 'Objekte werden nicht funktionieren, sie brauchen eine Adresse. Ehrlich gesagt bin ich mir nicht einmal sicher, wie 'decltype (m (foo))' 'funktioniert, ich bin nur irgendwie dabei. –