如何在c ++中定义any-to-any映射?

1 c++ map

我想在c ++中定义一个完全通用的映射,我可以将任何东西映射到任何东西.

我尝试了std :: map但是K和V应该是什么才能使它足够通用,这样我就可以将基元或对象(作为键)映射到其他基元或对象(作为值).

或者我可以使用另一种机制吗?

编辑:为了澄清,我试图在基类中定义一个关系(从中派生我的所有类),这将允许我将任意数据附加到我的类.最简单的方法是一个名称 - 值对,其中上面的键是一个字符串.我想知道我是否做了更通用的事情?

Pup*_*ppy 6

不可能 - 应该如此.这样的映射将毫无价值,因为您不能依赖于任何键或值的任何有意义的行为,并且不可能设计在"任何"之间有意义的二元关系或散列函数,或者可以在任何操作上运行类型,所以它甚至远不及可能的领域.

编辑:没有什么可以阻止std::unordered_map<std::string, boost::any>- 或者实际上,boost::any它碰巧std::unordered_map存在某些类型.

但是,您的设计似乎非常值得怀疑.你基本上完全颠覆了编译器没有明显的好处.你为什么要从一个共同的基础派生每一个班级?为什么你想要附加任意数据呢?将数据放入类中的通常方法是将其放入类中,而不是通过尝试强制C++成为解释语言来破坏所有安全性,性能和理智.