|
ICU 49.1
49.1
|
C++ API: Common ICU base class UObject. More...
#include "unicode/utypes.h"Go to the source code of this file.
Data Structures | |
| class | UMemory |
| UMemory is the common ICU base class. More... | |
| class | UObject |
| UObject is the common ICU "boilerplate" class. More... | |
Defines | |
| #define | UOBJECT_DEFINE_RTTI_IMPLEMENTATION(myClass) |
| This is a simple macro to add ICU RTTI to an ICU object implementation. | |
| #define | UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION(myClass) |
| This macro adds ICU RTTI to an ICU abstract class implementation. | |
| #define | UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION(myClass) UClassID myClass::getDynamicClassID() const { return NULL; } |
| This is a simple macro to express that a class and its subclasses do not offer ICU's "poor man's RTTI". | |
Typedefs | |
| typedef void * | UClassID |
| UClassID is used to identify classes without using the compiler's RTTI. | |
| #define UOBJECT_DEFINE_ABSTRACT_RTTI_IMPLEMENTATION | ( | myClass | ) |
UClassID U_EXPORT2 myClass::getStaticClassID() { \ static char classID = 0; \ return (UClassID)&classID; \ }
This macro adds ICU RTTI to an ICU abstract class implementation.
This macro should be invoked in *.cpp files. The corresponding header should declare getStaticClassID.
| myClass | The name of the class that needs RTTI defined. |
| #define UOBJECT_DEFINE_NO_RTTI_IMPLEMENTATION | ( | myClass | ) | UClassID myClass::getDynamicClassID() const { return NULL; } |
This is a simple macro to express that a class and its subclasses do not offer ICU's "poor man's RTTI".
Beginning with ICU 4.6, ICU requires C++ compiler RTTI. This does not go into the header. This should only be used in *.cpp files. Use this with a private getDynamicClassID() in an immediate subclass of UObject.
| myClass | The name of the class that needs RTTI defined. |
| #define UOBJECT_DEFINE_RTTI_IMPLEMENTATION | ( | myClass | ) |
UClassID U_EXPORT2 myClass::getStaticClassID() { \ static char classID = 0; \ return (UClassID)&classID; \ } \ UClassID myClass::getDynamicClassID() const \ { return myClass::getStaticClassID(); }
This is a simple macro to add ICU RTTI to an ICU object implementation.
This does not go into the header. This should only be used in *.cpp files.
| myClass | The name of the class that needs RTTI defined. |
| typedef void* UClassID |
UClassID is used to identify classes without using the compiler's RTTI.
This was used before C++ compilers consistently supported RTTI. ICU 4.6 requires compiler RTTI to be turned on.
Each class hierarchy which needs to implement polymorphic clone() or operator==() defines two methods, described in detail below. UClassID values can be compared using operator==(). Nothing else should be done with them.
class Base { public: virtual UClassID getDynamicClassID() const = 0; } class Derived { public: virtual UClassID getDynamicClassID() const { return Derived::getStaticClassID(); } }
Each concrete class implements getStaticClassID() as well, which allows clients to test for a specific type.
class Derived { public: static UClassID U_EXPORT2 getStaticClassID(); private: static char fgClassID; } // In Derived.cpp: UClassID Derived::getStaticClassID() { return (UClassID)&Derived::fgClassID; } char Derived::fgClassID = 0; // Value is irrelevant
1.7.5.1