Problém s typeid – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s typeid – C / C++ – Fórum – Programujte.comProblém s typeid – C / C++ – Fórum – Programujte.com

 

Radim920
Newbie
23. 6. 2009   #1
-
0
-

zdravím, mám v C++Builderu funkci s parametrem TObject *Sender a chci zjistit jeho přesnější typ. Jenže typeid(*Sender).name() vrací "TRichEdit", ale typeid(TRichEdit).name() vrací "Comctrls::TRichEdit", takže se to sobě nerovná.

if (typeid(*Sender) == typeid(TRichEdit)) { //nepravda :-(
//...
}

Nahlásit jako SPAM
IP: 88.146.188.–
dannyk0
Věrný člen
23. 6. 2009   #2
-
0
-

Zkusit to orezat o tu prvni cast Comctrls:: a porovnat zbytek???

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
Radim920
Newbie
23. 6. 2009   #3
-
0
-

To dannyk : no já bych chtěl (jen pro zajímavost) vědět, jak to udělat, aniž bych musel porovnávat textové řetězce...

Nahlásit jako SPAM
IP: 88.146.188.–
nikto
~ Anonymní uživatel
24 příspěvků
23. 6. 2009   #4
-
0
-

No, ja mam taky pocit ze by sa tak kompilator nemal chovat. Mozes, prosim ta, spustit tento kod alebo nejakym sposobom objasnit situaciu lebo sa to snazim zreprodukovat ale nedari sa mi (na GNU g++). Popr. ak ten kod nie je podobny tvojej situacii tak ma oprav.

#include <iostream>

#include <typeinfo>
using namespace std;

class Base {virtual void poly() {} };
namespace test {
class der : public Base {};
}
using namespace test;

void fun(Base *b) {
cout << typeid(*b).name() << endl;
cout << typeid(der).name() << endl;
cout << (typeid(*b) == typeid(der)) << endl;
}

int main() {
der *d = new der();
fun(d);
delete d;
return 0;
}

Nahlásit jako SPAM
IP: 217.118.98.–
Radim920
Newbie
25. 6. 2009   #5
-
0
-

Když upravím Vaši funkci main() a zadám do parametru fun() objekt typu Base (nikoli der), vypíše mi to různé názvy tříd a výraz vrátí nulu (v C++Builderu i pod Dev-C++ s kompilátorem Mingw).

int main() {

Base *b = new Base();
fun(b);
delete b;
return 0;
}

Nahlásit jako SPAM
IP: 88.146.188.–
Radim920
Newbie
25. 6. 2009   #6
-
0
-

aha ne, co jsem napsal je hovadina...
teoreticky by to mělo být jak píšete, ale proč se to chová jinak než u VCL nevím...

Nahlásit jako SPAM
IP: 88.146.188.–
nikto
~ Anonymní uživatel
24 příspěvků
26. 6. 2009   #7
-
0
-

No presne... tak ako ste to napisali v predposlednom prispevku by sa to chovat malo. Ja to vidim na bugreport ;)

Nahlásit jako SPAM
IP: 217.118.98.–
ondra.holub+1
Stálý člen
26. 6. 2009   #8
-
0
-

Pro metodu name() od typeid není ve standardu definováno, co musí vracet. Že je to nějaký unikátní název je jenom doporučení. Takže pokud bude překladač vracet prázdný řetězec, tak je to pořád v pořádku (pominu diskuse, k čemu ta metoda pak je).

Takže buď porovnat jedno typeid s druhým (jak má na konci funkce fun nikto, nebo použít dynamic_cast. Tím se sice neodhalí konkrétní instance, ale většinou to stačí.

Nahlásit jako SPAM
IP: 194.138.12.–
nikto
~ Anonymní uživatel
24 příspěvků
26. 6. 2009   #9
-
0
-

To ondra.holub : Lenze Radim92 ma v kode v 1. prispevku porovnavanie dvoch typeid a vracia mu to false co je zle aj podla standardu.

Nahlásit jako SPAM
IP: 217.118.98.–
ondra.holub
~ Anonymní uživatel
255 příspěvků
27. 6. 2009   #10
-
0
-

To nikto : Ano, máte pravdu. Asi jsem to pořádně nedočetl do konce. Pak souhlasím s tím, že to vypadá na bug v překladači.

Nahlásit jako SPAM
IP: 85.207.23.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 18 hostů

Podobná vlákna

Problém — založil Dfire

Problém v C — založil Robin

Problém — založil Ma.ty

Problém — založil pali6

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý