D's built-in TypeInfo
doesn't provide nearly as much information as we can get from the compile-time reflection tools. Here, we'll create an extended type info with custom data.
Let's execute the following steps to extend the runtime type information:
Create an interface with methods exposing the information you want to make available at runtime.
If your method works with the data, remember that RTTI is typically used with very little compile-time type information. Thus, methods should take a generic runtime type, such as
Object
orvoid*
in the generic interface.Create an associative array of your interface keyed on
TypeInfo
.Write helper functions to retrieve the information from the associative array. Use
typeid()
to get the lookup key from a given variable or type.Write a template class that will implement your generic interface for each supported type. The
std.traits
Phobos module will help with our implementation.Write a
mixin
template...