template friend?
-
template<class T> class c { friend class T; };Warum geht das nicht?
Fehler: Templatetyp-Parameter »T« wird nach »class« verwendet
Fehler: »friend«-Deklaration benennt keine Klasse oder Funktion
-
grrr schrieb:
template<class T> class c { friend class T; };Warum geht das nicht?
Fehler: Templatetyp-Parameter »T« wird nach »class« verwendet
Fehler: »friend«-Deklaration benennt keine Klasse oder FunktionHi, wer sagt das T eine Klasse ist und nicht ein int oder sonstwas

Also funktionier das IMHO auch nicht ...
-
Hi, wer sagt das T eine Klasse ist und nicht ein int oder sonstwas
Dann kann der compiler immernoch beim erstellen der Klasse den Fehler anzeigen.
-
schonmal das probiert?
template <class T> class Foo { template <class U> struct helper { typedef U type; }; friend class helper<T>::type; };
-
Hm joa so geht das danke. Würde aber gerne mal wissen warum das von oben nicht geht.
-
man kann nicht friend mit nem template abhängigen typ einsetzen, das erlaubt der standard nicht. Dies ist auch nicht sinnvoll, da es die datenkapselung völlig vor die hunde gehen lassen würde

Und das Beispiel von queer_boy ist imho auch nicht portabel. Ich denk mal das funktioniert nur, weil der Compiler nicht weit genug prüft.
-
queer_boy schrieb:
schonmal das probiert?
template <class T> class Foo { template <class U> struct helper { typedef U type; }; friend class helper<T>::type; };Hübsch, ändert aber nichts am Problem, bestenfalls den Zeitpunkt, wann du es mitgeteilt bekommst. Aus Sicht von Standard-C++ sind beide Varianten illegal, da eine friend-Deklaration einen "Elaborated Type Specifier" erwartet. Weder T noch helper<T>::type sind aber solche.
-
ok, dann hab ich wieder mal was gelernt.
