Wie mache ich jede Instanz eines templates zu einem Freund von mir?
-
gcc gibt mir jetzt nurnoch 1+folgefehler(der will akzeptiert das template da net^^)hab den code so verändert:
template<class x,template<class>class y> class bar; template<class T,T t> class foo{ public: template<class T2,template<class>class U> friend class bar<T2,U>; private: foo(int a); }; template<class x> class y{}; template <class x=foo<char,'*'>,template<class>class y=y> class bar { private: x f; public: bar(int a):f(a){} }; int main(){ bar<> T(5); }
schau ihn dir genau an, sind zum größten teil standardfehler
-
Bei mir sinds immernoch 3, wenn du das als Folgefehler ansiehst, bei mir auch. Das ist natürlich nicht ganz genau mein Code, genau genommen sind die Parameter etwas anders. Aber ich habe immer noch 2* den Fehler das mehrere Vorlagenparameter nicht erlaubt sind. und 1* das T2 nicht für y geeignet wäre??? >frust<
-
ach wie ich die suche liebe....und die syntax von C++ mit all ihren tücken und sonderfällen verabscheue:
template<class T2,template<class>class U> friend class bar;
bäh. bitte neuer standard, mach das einheitlich
überall sonst muss man die template parameter mit angeben, nur hier nicht
-
Otze, du bst wieder mal mein Retter! Aber verrate mir eins: was für einen Suchbegriff hast du eingegeben?
-
otze schrieb:
template<class T2,template<class>class U> friend class bar;
Sicher, dass das stimmt?
-
100 pro, der gcc kompiliert das, die suche sagt das so, und google auch.
suchbegriff: friend template
-
Das sieht mir so fernab von allem aus, was ich gültige C++ Syntax nennen würde. Kompiliert der gcc das auch auf pedantic?
-
--------------------Configuration: test - Debug--------------------
Compiling source file(s)...
test.cpp
Linking...test.exe - 0 error(s), 0 warning(s)
alle warnungen aktiviert, pedantic drin
-
Das wird deine Zweifel nicht beheben, aber VS 7.1 kompilierts auch.
-
otze schrieb:
bäh. bitte neuer standard, mach das einheitlich
Bäh. Bitte otze lern vorher mehr über C++ bevor du sowas vorderst. Die Syntax *ist* einheitlich.
Eine friend-Deklaration ist immer auch eine Deklaration (sie kann sogar die einzige Deklaration eines Typs sein). Bei dieser Deklaration darf es sich aber nunmal hier nur um die eines Primary-Templates handeln (da man friends auch gleich definieren kann, könnte man sonst lustig eine partielle Spezialisierung ohne Primary Template bauen - ups!). Und ein Primary-Template hat man schon immer ohne Template-Argument-Liste deklariert.
Die Syntax:
template <class T, class U, ...> class X<T, U, ...>
steht seit je her für eine partielle Spezialisierung (Deklaration oder Definition. Eine solche hat in einer friend-Deklaration überhaupt nichts zu suchen. Partielle Spezialisierung sind immer automatisch friend, wenn ihr Primary-Template friend ist.