Keys should be names rather than strings
Metadata keys are defined using a std::string, eg.
This method has a number of backdraws:
- The compiler doesn't know the string, no compile-time check is possible,
eg, to catch typos
- Editors cannot help with auto-completion of the key string
- The strings use more memory than necessary
A better implementation would be to have a name (constant variable) for each tag, which the compiler could check and editors could auto-complete.
The information that is required for each tag is: metdata type, group, tag number, ie, 3 small integers