The approach Ive used is programmers in fact write my own tree where programming Metadata objects also are programming nodes themselves; it truly is, programming Metadata class has programming child tips and such necessary programmers implement desktop technological know-how binary tree or computer technological know-how red black tree, or so on. The end result is computer science lot of extra code since std::map cant just be reused, but there are absolutely zero runtime memory allocations required for programming metadata system, programming memory cost of metadata is pretty much as good as or better than std::map, and programming runtime complexity is programming same. If compile time string hashing was feasible in Visual C++, it will even be an option programmers use computing device technological know-how fixed size hash table with our choice of best hash, but sadly that wont be an option until at the least Visual Studio 11 SP1 or so on every occasion Microsoft ultimately gets us constexpr assist like GCC and Clang have already got. If you do enforce your own tree, I recommend doing it as laptop technology template mixin, as it may be useful in a while for attaching homes programmers metadata, which has programming same set of issues and which is just an alternate std::map member in programming Metadata class if you go programming easier route. To finish off programming registration, programming constructor for Metadata should call MetaManager::registerMetathis, programmers sign in itself with programming supervisor. Now that we have got computing device science Metadata class, programming question becomes, how do I create an example of programming Metadata object for every class? Theres computer science lot of how programmers try this, Ive used all of them and seen most of them used in other engines, and they each have advantages and downsides.