C++ - passing-Methode pointer als template-argument

Ich habe ein Anrufer die Funktion wie folgt:

template<typename T, void (T::*method)()>
void CallMethod(T *object){
    (object->*method)(args);
}

während dieser perfekt funktioniert:

void (*function)(A *) = &CallMethod<A, &A::method>;

dieser code nicht kompilieren mit dem Fehler in der zweiten Zeile:

void (A::*method)() = &A::method;
void (*function)(A *) = &CallMethod<A, method>;

Gibt es eine Möglichkeit es zu beheben? Ich brauche die CallMethod Vorlage zu nehmen, ein konstanter Zeiger auf eine Methode, die in einer Variablen gespeichert ist.

  • Ist, dass der eigentliche code, der nicht kompiliert? Was ist die "Methode" hier? Sie bei der Zuordnung einer member-Funktion namens Methode auf eine variable auch als Methode plus die member-Funktion variable deklariert ist falsch..
  • warum nimmst du nicht std::tr1::function/boost::function mit binden für diese?
  • 'Methode' ist nur eine Methode von A. Es ist nicht eine tatsächliche code, ich habe versucht, um es zu vereinfachen, so viel wie möglich.
  • boost:Funktion/bind funktioniert nicht, wenn das, was er eigentlich will, ist eine Funktion, die einen A* - parameter. Ich denke, er wird versuchen, dynamisch zu erstellen.
  • Sie können bind eine member-Funktion eines Objekts, die Funktion Zeiger von der function zurückgegeben, und die Arbeit mit, dass...
  • er hat eine C-Schnittstelle, die will eine normale Funktion, nicht eine member-Funktion. Sie können einen boost::function noch brauchst aber einen adapter, wie das in meiner Antwort zu bekommen, es funktioniert in eine C-Schnittstelle.
  • siehe den ersten link in meiner Antwort aktualisiert, um zu sehen, eine Methode, eine Funktion Zeiger von einer function Objekt.

InformationsquelleAutor Juraj Blaho | 2010-12-08
Schreibe einen Kommentar