I would like to define a completely generic mapping in c++ where I can map anything to anything.
I tried std::map but what should K and V be to make it general enough so I can map primitives or objects (as keys) to other primitives or objects (as values).
Or is there another mechanism I could use?
EDIT: For clarification, I am trying to define a relationship in the base class (from which all my classes are derived) that will allow me to attach arbitrary data to my classes. The simplest approach would be a be a name-value pair, where the above key is a string. I was wondering if i do something more generic?
Impossible- as it should be. Such a mapping would be worthless, since you can’t depend on any meaningful behaviour of either key or value, and it’s impossible to design either a binary relation or hash function that would be meaningful across “anything”, or that could operate on any type, so it’s nowhere near even the realm of possible.
Edit: There is nothing preventing
std::unordered_map<std::string, boost::any>– or indeed,boost::anywhich happens to hold astd::unordered_mapof some types.However, your design appears highly questionable. You’re basically completely subverting the compiler for no apparent benefit. Why would you derive every class from a common base? And why on earth would you want to attach arbitrary data? The usual way to put data in a class is to put it in the class, not blow all your safety and performance and sanity by trying to coerce C++ into being an interpreted language.