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 

virtual bool operator==()

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





PostPosted: Mon Apr 05, 2004 8:05 pm    Post subject: virtual bool operator==() Reply with quote



Hi,
ganz einfache Frage. Bin gerade dabei, eine Liste von Objekten einer
bestimmten Basisklasse (Typen) mit einer anderen zu vergleichen. Was ich
in google gefunden habe, ist nur verwirrend. Mein Vergleich geht davon
aus, das Objekte unterschiedlicher Typen nicht gleich sein können; von
daher scheidet double dispatching eigentlich schon mal aus.

struct base {
virtual bool operator==(const base&) const = 0;
};

struct derivedX : base
{
int member;
virtual bool operator==(const base& rhs) const
{
const base* other = dynamic_cast<const derivedX*>(&rhs);

return other != 0 && member == other->member;
}
};

scheint mir ein gangbares pattern zu sein. Wieso finde ich diese Lösung
kaum, wenn ich via google suche?

mfg Torsten

--
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
Markus Schaaf
Guest





PostPosted: Mon Apr 05, 2004 10:18 pm    Post subject: Re: virtual bool operator==() Reply with quote



"Torsten Robitzki" <firstname (AT) lastname (DOT) de> schrieb:

Quote:
aus, das Objekte unterschiedlicher Typen nicht gleich sein können; von
daher scheidet double dispatching eigentlich schon mal aus.

struct base {
virtual bool operator==(const base&) const = 0;
};

struct derivedX : base
{
int member;
virtual bool operator==(const base& rhs) const
{
const base* other = dynamic_cast<const derivedX*>(&rhs);

return other != 0 && member == other->member;
}
};

scheint mir ein gangbares pattern zu sein. Wieso finde ich diese Lösung
kaum, wenn ich via google suche?

Weil das nur eine Spielart von Double-Dispatch ist. Der erste Dispatch
ist der Aufruf des virtuellen Operators, der zweite der »dynamic_cast«.
Viele der Probleme, die die Multi-Dispatcher zu lösen versuchen, hast
Du vielleicht gar nicht. -- Eine Variante, die mit Sicherheit näher an
Deiner Spezifikation wäre:

struct derivedX : base
{
int member;

bool operator == ( const derivedX& o ) const {
return member == static_cast< derivedX const& >(o).member;
}

bool operator == ( const base& o ) const {
return typeid(o) == typeid(*this)
&& operator == ( static_cast< derivedX const& >(o) );
}
};

(Für den Fall, daß die Hierarchie nicht flach ist.)

--
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.