C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Re: templates und friend-Funktionen

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Marcel Müller
Guest





PostPosted: Wed Jan 25, 2006 11:43 pm    Post subject: Re: templates und friend-Funktionen Reply with quote



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





PostPosted: Thu Jan 26, 2006 12:51 pm    Post subject: Re: templates und friend-Funktionen Reply with quote



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





PostPosted: Thu Jan 26, 2006 5:14 pm    Post subject: Re: templates und friend-Funktionen Reply with quote



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 ?

Quote:
template foo
?

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 ;-)

Quote:

Marcel


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





PostPosted: Thu Jan 26, 2006 5:26 pm    Post subject: Re: templates und friend-Funktionen Reply with quote

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





PostPosted: Thu Jan 26, 2006 9:21 pm    Post subject: Re: templates und friend-Funktionen Reply with quote

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
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
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


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.