Ein Funktionszeiger, der auf eine Funktion zeigt, die mit dem Funktionszeiger als Templat Argument ein Objekt einer Template-Klasse erfolgt. Möglich?
-
23-08-2019 - |
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?
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
Aus dem zugehörigen Link Abschnitt auf genau dieser Seite: wie kann ich typedef einen Funktionszeiger, der eine Funktion seiner eigenen Art als Argument?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow