 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Marcel Müller Guest
|
Posted: Wed Jan 25, 2006 11:43 pm Post subject: Re: templates und friend-Funktionen |
|
|
Hallo!
Warum nicht so:
template <size_t t>
struct foo
{
friend foo<t>& operator << (foo
};
template <size_t t>
foo<t>& operator << (foo
?
Das andere definiert ja für jede Variante von foo nochmal einen Operator
<<, den es für jeden Integer u gibt. Kurzum es dürfte nicht nur der
eigene << Operator als friend drauf, sondern auch jeder andere.
Gleichwohl spricht aus meiner Sicht nichts dagegen, dass jeder Operator
<<(foo
Ich vermute, MSVC hat es mal wieder versiebt. (Sorry, hatte mit MSVC 7.0
und 7.1 mit C++ auch schon mächtig "Spaß".)
Vielleicht hilft ihm ein
struct foo;
template <size_t u>
foo<u>& operator << (foo
vor der Klassendefinition auf die Sprünge.
Marcel
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Marcel Müller Guest
|
Posted: Thu Jan 26, 2006 12:51 pm Post subject: Re: templates und friend-Funktionen |
|
|
Korrektur!
Sollte natürlich heißen:
template <size_t t>
struct foo;
template <size_t u>
foo<u>& operator << (foo
Marcel
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Christian Sulzer Guest
|
Posted: Thu Jan 26, 2006 5:14 pm Post subject: Re: templates und friend-Funktionen |
|
|
Marcel Müller wrote:
| Quote: | template <size_t t
struct foo
{
friend foo
};
|
IMO ist der Operator << doch vergleichbar mit ein Funktionstemplate, daß
seinen eigenen Templateparameter benötigt ?
Das gibt zumindest bei VC++7.1 einen Linkerfehler (Definition von
operator << nicht gefunden). Also Deklaration != Definition.
| Quote: |
Das andere definiert ja für jede Variante von foo nochmal einen Operator
, den es für jeden Integer u gibt. Kurzum es dürfte nicht nur der
eigene << Operator als friend drauf, sondern auch jeder andere.
|
Also da habe ich was grundsätzlich falsch verstanden. Ich dachte, der
operator << ist in diesem Fall wie eine freie Funktion zu behandeln, zu
der sich die Klasse foo als friend verhält.
| Quote: | Gleichwohl spricht aus meiner Sicht nichts dagegen, dass jeder Operator
(foo
|
Davon ging ich eigentlich aus.
| Quote: | Vielleicht hilft ihm ein
struct foo;
template <size_t u
foo
vor der Klassendefinition auf die Sprünge.
|
Hat leider nix bewirkt. Dieselbe Fehlermeldung. Die Korrektur deines
nachfolgenden Postings habe ich berücksichtigt.
ich vermute auch, daß es sich um einen Compilerbug handelt. Der g++
hat's ja ohne zu meckern gefressen ;-)
Besten Dank nochmal,
Chris
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Thomas Maeder Guest
|
Posted: Thu Jan 26, 2006 5:26 pm Post subject: Re: templates und friend-Funktionen |
|
|
Marcel Müller <news.5.maazl (AT) spamgourmet (DOT) com> writes:
| Quote: | Hallo!
Warum nicht so:
template <size_t t
struct foo
{
friend foo
|
Das deklariert eine gewöhnliche Funktion (kein Template).
| Quote: | };
template <size_t t
foo
|
Das definiert ein Template.
| Quote: | Das andere definiert ja für jede Variante von foo nochmal einen
Operator <<, den es für jeden Integer u gibt. Kurzum es dürfte nicht
nur der eigene << Operator als friend drauf, sondern auch jeder andere.
Gleichwohl spricht aus meiner Sicht nichts dagegen, dass jeder
Operator <<(foo
Ich vermute, MSVC hat es mal wieder versiebt. (Sorry, hatte mit MSVC
7.0 und 7.1 mit C++ auch schon mächtig "Spaß".)
Vielleicht hilft ihm ein
struct foo;
template <size_t u
foo
vor der Klassendefinition auf die Sprünge.
|
.... und die friend-Deklaration muss dann
friend foo<t>& operator << <>(foo<t> &f, int i);
lauten, damit sie sich auf eine Spezialisierung des Templates bezieht.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Marcel Müller Guest
|
Posted: Thu Jan 26, 2006 9:21 pm Post subject: Re: templates und friend-Funktionen |
|
|
Thomas Maeder wrote:
| Quote: | Marcel Müller <news.5.maazl (AT) spamgourmet (DOT) com> writes:
friend foo<t>& operator << (foo
Das deklariert eine gewöhnliche Funktion (kein Template).
|
Ja, stimmt, nächster Fehler.
Muss heissen:
friend foo<t>& operator << <>(foo<t> &f, int i);
(Wenn man einmal etwas nicht gleich ausprobieren kann.)
Das habe ich aber jetzt getestet!
Marcel
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|