Ein Funktionszeiger, der auf eine Funktion zeigt, die mit dem Funktionszeiger als Templat Argument ein Objekt einer Template-Klasse erfolgt. Möglich?

StackOverflow https://stackoverflow.com/questions/1082552

Frage

x__x

Ich möchte etwas tun:

typedef long (* fp)(BaseWindow< fp > & wnd, HWND hwnd, long wparam, long lparam);

Aber ich bekomme einen Compiler-Fehler:

  

Fehler C2065: 'fp': nicht deklarierter   Kennung

Ist es möglich, diese irgendwie zu implementieren?

War es hilfreich?

Lösung

Nein, es ist nicht, weil der Typ der Template-Parameter selbst umfassen würde. Dies würde in der Art zu einer endlosen Rekursion ergeben.

Wenn statt der Klassenvorlage Spezialisierung Sie eine Basisklasse davon akzeptieren, das ist sehr gut möglich,

struct TemplateBase {

};

typedef long (*fpType)(TemplateBase&, HWND, long, long);

template<fpType FP>
struct BaseWindow : TemplateBase {

};


long sampleFunc(TemplateBase &b, HWND hwnd, long wparam, long lparam) {
  ...
}

int main() {
    BaseWindow<sampleFunc> bw;
    sampleFunc(bw, ...);
}

Was wollen Sie damit zu tun?

Andere Tipps

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top