Category (__rtti keyword)
Modifiers, C++ Keyword Extensions, C++-Specific Keywords
Description
Runtime type identification is enabled by default. You can disable RTTI on the C++ page of the Project Options dialog box. From the command-line, you can use the -RT- option to disable it or -RT to enable it.
If RTTI is disabled, or if the argument to typeid is a pointer or a reference to a non-polymorphic class, typeid returns a reference to a const type_info object that describes the declared type of the pointer or reference, and not the actual object that the pointer or reference is bound to.
In addition, even when RTTI is disabled, you can force all instances of a particular class and all classes derived from that class to provide polymorphic runtime type identification (where appropriate) by using the __rtti keyword in the class definition.
When runtime type identification is disabled, if any base class is declared __rtti, then all polymorphic base classes must also be declared __rtti.
struct __rtti S1 { virtual s1func(); }; /* Polymorphic */ struct __rtti S2 { virtual s2func(); }; /* Polymorphic */ struct X : S1, S2 { };
If you turn off the RTTI mechanism, type information might not be available for derived classes. When a class is derived from multiple classes, the order and type of base classes determines whether or not the class inherits the RTTI capability.
When you have polymorphic and non-polymorphic classes, the order of inheritance is important. If you compile the following declarations without RTTI, you should declare X with the __rtti modifier. Otherwise, switching the order of the base classes for the class X results in the compile-time error "Can't inherit non-RTTI class from RTTI base 'S1'."
struct __rtti S1 { virtual func(); }; /* Polymorphic class */ struct S2 { }; /* Non-polymorphic class */ struct __rtti X : S1, S2 { };
struct __rtti S1 { }; // Non-polymorphic class struct S2 { }; struct X : S2, S1 { }; // The order is not essential
Neither the __rtti keyword, nor enabling RTTI will make a static class into a polymorphic class.
Copyright(C) 2009 Embarcadero Technologies, Inc. All Rights Reserved.
|
What do you think about this topic? Send feedback!
|