template-Funktion als friend-function einer Template Klasse ?
-
Hallo Leute,
ich kämpfe gerade mal wieder mit Templates.
Was läuft hier falsch:template <typename T> class A : public B<T> { public: /* blablabla */ private: friend T readFunc<T>(void *); friend void writeFunc<T>(T data, void*); }; template <typename T> T readFunc(void* inRefCon) { A<T>* pA = static_cast<A<T>*>(inRefCon); return pA->data(); } template <typename T> void writeFunc(T data, void* inRefCon) { A<T>* pA = static_cast<A<T>*>(inRefCon); pA->set(data); }Wie unschwer zu erkennen ist, muss die readFunc bzw writeFunc vom Datentyp her zur Klasse A passen.
Der Kompiler moniert mir:
error: ‘readFunc’ is neither function nor member function; cannot be declared friend error: expected ‘;’ before ‘<’ tokenbevor jetzt die Unkenrufe kommen "mach doch ne Memberfunktion draus", geht nicht, die Funktionen müssen als Funktionspointer in eine C-API, daher nix mit memberfunktion.
Danke und ein frohes neues Jahr an Alle!
-
Hallo,
sind die beiden Funktionen denn irgendwie zum Punkt der friend-Deklaration bekannt?template <typename T> T readFunc(void* inRefCon) { A<T>* pA = static_cast<A<T>*>(inRefCon); return pA->data(); } template <typename T> void writeFunc(T data, void* inRefCon) { A<T>* pA = static_cast<A<T>*>(inRefCon); pA->set(data); } template<typename T> class B { }; template <typename T> class A: public B<T> { public: private: friend T readFunc<T>(void *); friend void writeFunc<T>(T data, void*); void set(T const& data); T const& data(); }; int main() { A<int> a; writeFunc<int>(1, &a); readFunc<int>(&a); }Kompiliert bei mir anstandslos (gcc).
-
guuuuuter Input!
Habe jetzt zwei deklarationen (nicht definitionen) oberhalb der Klasse eingefügt (und die Definitionen unten gelassen wie sie sind).
Kompiliert!
Danke!