<p style="margin:0;padding:0;" align="left">Actually, you don't have to use an additional enum if you don't switch off RTTI in your compiler option (http://en.wikipedia.org/wiki/Runtime_Type_Information) because the type information is already embedded in the object.<br />With RTTI, you can simply dynamic_cast to the derived type, and if it fails (returns NULL) then you have the wrong type:<br /><br />so instead of:<br /><br /></p>     if (vec[0]->GetType()==IT_CD) {<br /> Cd *cd=(Cd *)vec[o] ;<br /> cd->setArtist("Music-bar");<br />}<br /> <br />you would have:<br /><br /> Cd*cd = dynamic_cast<Cd*>(vec[0]);<br />if(cd) cd->setArtist("Music-bar");<br /><br /><br /><br /><blockquote style="border-left: 2px solid #ff0000; padding-left: 5px; margin-left: 5px">> Message du 15/04/09 09:59<br />> De : "M-.-n" <br />> A : "Music-bar" <br />> Copie à : <br />> Objet : Re: Programming question of the week ;)<br />><br />> <br />> <br />> Another possibility, but that I save only for extreme case (because it's <br />> not super elegant) is to have a placeholder for a type field in your <br />> base class:<br />> <br />> Enum ItemType {<br />>     IT_BOOK,<br />>     IT_CD<br />> } ;<br />> <br />> Have the parameter to be mandatory in the item constructor so you can do<br />> <br />> int main()<br />> {<br />>    Cd *cd1 = new Cd("Music-barr", "Shelter");<br />> <br />>    vector vec;<br />>    vec.push_back(cd1);<br />> <br />>    if (vec[0]->GetType()==IT_CD) {<br />>         Cd *cd=(Cd *)vec[o] ;<br />>   cd->setArtist("Music-bar");<br />>    }<br />> <br />> }<br />> <br />> <br />> You can achieve the same using dynamic casts but for some reason I never <br />> really like it's syntax.<br />> <br />> Mikael Hansson a écrit :<br />> > Martin Naef skrev:<br />> >   <br />> >> I'm with Marc on that one. Generally, do the setArtist thing while you <br />> >> know what type you're dealing with. You can either do that by keeping <br />> >> separate lists for each subtype, or by having your editing functionality <br />> >> through a type-aware editing system.<br />> >>   <br />> >>     <br />> ><br />> > Soundds like good ideas, I'll save this in my valuable strategic design <br />> > compartment for when I'm doing a *real* program :)<br />> > I actually don't need the functionality I tried to get in order to make <br />> > the application work. I think that one part of really understanding <br />> > programming is to try many things and then get your head around why some <br />> > of them doesn't work and what would be a better choice of design.<br />> ><br />> > Thanks for helping out!<br />> ><br />> > /Micke<br />> ><br />> ><br />> > ps. let me know when I get too annoying, it's just that it's great <br />> > getting input from people that actually know what they're talking about<br />> > _______________________________________________<br />> > music-bar mailing list<br />> > music-bar@lists.music-bar.org<br />> > http://lists.music-bar.org/cgi-bin/mailman/listinfo/music-bar<br />> ><br />> >   <br />> <br />> _______________________________________________<br />> music-bar mailing list<br />> music-bar@lists.music-bar.org<br />> http://lists.music-bar.org/cgi-bin/mailman/listinfo/music-bar<br />> <br />> </blockquote><BR><BR><i><a style='color:#0000FF;text-decoration:underline' target=_blank href=http://www.laposte.net>Créez votre adresse</a> électronique prenom.nom@laposte.net<BR> 1 Go d'espace de stockage, anti-spam et anti-virus intégrés.</i><BR>