简体   繁体   中英

Can type_info pointers be used to distingush types in C++?

I have a set of polymorphic C++ classes and they are all instantiated by the same module (Windows DLL). Now having two pointers to such classes and having called typeid :

SomeCommonBase* first = ...; //valid pointer
SomeCommonBase* second = ...; //valid pointer
const type_info& firstInfo = typeid( first );
const type_info& secondInfo = typeid( second );

can I compare retrieved type_info addresses

if( &firstInfo == &secondInfo ) {
   //objects are of the same class
} else {
   //objects are of different classes
}

or use ==

if( firstInfo == secondInfo ) {
   //objects are of the same class
} else {
   //objects are of different classes
}

to detect whether objects are of (exactly) the same class or of different classes? Is it guaranteed to work when objects are instantiated from within the same module?

You can only retrieve const type_info references, and you should always use operator== .

As I'm writing this, your code is

SomeCommonBase* first = ...; //valid pointer
SomeCommonBase* second = ...; //valid pointer
type_info& firstInfo = typeid( first );
type_info& secondInfo = typeid( second );

It should not compile because typeid returns a reference to const .

Worse, you are asking for type info about the pointers. Both pointers are of type SomeCommonBase* , so you're guaranteed that they are of the same type. Ask instead for type info about the pointed to objects.

That said, as @DeadMg remarked, you also need to use operator== to compare type info objects.

The C++ standard does not address the issue of dynamic libraries. But within any given Windows module you should be safe.

Cheers & hth.,

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM