C++ &引用;Python字典“;C++;?

C++ &引用;Python字典“;C++;?,c++,c++11,dictionary,C++,C++11,Dictionary,在Python中,可以定义一个字典,如 a={ ‘a’:‘hhh’, “b”:123, 'jfa':{'j':1.5,'r':'string'} } 在C++11中,我看到您可以 std::map a={ {“a”,1}, {“hh”,4} }; 但我真的希望这些值在类型上有所不同(特别是允许字典作为值)。有没有一个习惯用法或库允许这样做?下一个标准有什么计划吗?目前有boost::variant(允许一组特定类型适合对象)或boost::any允许任何类型适合对象。据我所知,这两种方法都被

在Python中,可以定义一个字典,如

a={
‘a’:‘hhh’,
“b”:123,
'jfa':{'j':1.5,'r':'string'}
}
在C++11中,我看到您可以

std::map a={
{“a”,1},
{“hh”,4}
};

但我真的希望这些值在类型上有所不同(特别是允许字典作为值)。有没有一个习惯用法或库允许这样做?下一个标准有什么计划吗?

目前有
boost::variant
(允许一组特定类型适合对象)或
boost::any
允许任何类型适合对象。据我所知,这两种方法都被考虑添加到标准库中,但是我更确信<代码>任何< /COD> .< /P> < P>您可以考虑Niels Lohmann对于C++库的优秀JSON。单头许可证使JSON成为第一类类型

链接此处:

例如:

nlohmann::json myDict = {
  {"a", 1},
  {"hh", 4}
}

使用
boost::any
boost::variant
或类似功能?在最后一部分中,GCC支持库基础TS中的
std::experimental::any
。IIRC,
variant
是LF2 TS的一部分,或者它甚至还不在那里。关于这方面的设计决策有很多讨论。如果您想要的值类型可以表示为某些通用(可能是抽象)基类的合理子类,那么您可以使用智能指针指向实例。否则,您将不得不使用一些运行时类型检查,就像使用
boost::any
boost::variant
一样,而且这种设计气味很强烈,可能会让您丧命。或者严重伤害你。我相信boost::variant的要点是,某些操作可以进行编译时类型检查。看见“不过我从来没用过它。”谢啦,桑德。-阿尔夫完全同意。我多次看到,几乎每一个这样的情况都可以以更好的方式(在性能方面)解决。至于问题本身:C++是强静态类型的语言,而Python是动态类型的(实际上是几乎没有类型的)。我有点害怕,越来越多的人认为,每种语言都应该有相同的特征。那是不可能的。像“这是我的Ruby/Python代码。我如何转换它到C/C++?”或者“像C++一样,我能用java做X?”没有任何意义。这是个有趣的想法,尽管它感觉像是JSON库的轻微滥用。