Toon posts:

[GNU C++] RTTI implementatie?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo, ik heb een lijst van ostream objecten, waarvan sommige ofstream
objecten zijn. Hoe kan ik deze herkennen? Via runtime type information?
Ik wil namelijk de ofstream objecten sluiten.

hier is een codevoorbeeld van wat ik probeer te implementeren:

list<ostream*> outputstreams;
//..vul lijst met allerlijk ostream objecten waaronder ofstream objs
list<ostream*>::iterator it = outputstreams.begin();
while(it!=outputstreams.end()) {
//als **it een ofstream object is, sluit hem dan...
ofstream* p_ofs = dynamic_cast<ofstream*> *it;
if(p_ofs)
p_ofs.close();
it++;
}

Ik heb ge-grep-ed onder /usr/include naar "dynamic_cast" maar ik heb
de functie niet gevonden, en mijn compiler herkent de functie
niet...(parse error)

Mijn vragen zijn de volgende:
1-weet iemand of dit een goede aanpak is voor dit probleem, zo nee,
waarom dan wel niet ;-)
2-RTTI maakt wel deel uit van standaard c++, zie bijvoorbeeld
http://documentation.capt...ok/ch07/ch07.htm#Heading7
maar is het ook geimplementeerd onder de GNU compiler ?
Ik zie bijvoorbeeld onder /usr/include/g++-v3/typeinfo wel een
implementatie van typeid, maar ik heb dynamic cast nodig...

Hopelijk kan iemand me helpen!

Groeten,
Dede

ook gepost naar nl.comp.os.linux.programmeren, ben van nature ongeduldig :-)

Verwijderd

Topicstarter
Aha, was een syntax fout van mij: de dynamic_cast operator heeft 2 argumenten:
ofstream *p_ofs = dynamic_cast<ofstream *> *it;
moet zijn
ofstream *p_ofs = dynamic_cast<ofstream *> (*it);

En dit is inderdaad gewoon mogelijk met g++ 2.95.4 onder linux.
Maar dynamic casten van een cerr* naar een ofstream* levert
een SEGFAULT op, ipv een mislukte cast wat een NULL op zou
moeten leveren. Waarom weet ik niet....

[ Voor 47% gewijzigd door Verwijderd op 14-12-2002 19:11 ]