The NanoRtti library provides customized run-time type information (RTTI) support. It can provide the RTTI ability on specific classes when the compiler one is turned off. It's cross platform, doesn't have 3rd party dependency. And the core method it uses is stable across the binary modules.
Add the NANO_RTTI_REGISTER_RUNTIME_CLASS to the public section of classes that need RTTI. Its parameters are base classes. Here is an example.
class Base
{
public:
NANO_RTTI_REGISTER_RUNTIME_CLASS();
virtual ~Base(){};
};
class Derived : public Base
{
public:
NANO_RTTI_REGISTER_RUNTIME_CLASS(Base);
};
Now you can use DynCast as a drop-in replacement of dynamic_cast, or TypeId() to get the type info of a type.
Base* pb = new Derived;
Derived* pd = DynCast<Derived*>(pb);
...
TypeInfo ty = TypeId<Derived>();
...
NanoRtti is distributed under the terms of MIT license. See LICENSE for details.