【发布时间】:2019-10-14 11:52:32
【问题描述】:
我想编写一个行为几乎等同于 Python 字典的 C++ 对象。 C++ 的std::map 和std::unordered_map 提供了Python 字典已经具备的一些功能,但缺少最重要的功能之一,即能够添加任意对象和类型。即使不可能,你离实现 Python 字典的功能还有多远?
之前的几个问题(here 和here)未能处理向字典中添加多种类型的问题。
例如,我希望能够在 C++ 中做这样的事情:
my_dict = {'first': 1,
'second': "string",
'third': 3.5,
'fourth': my_object}
my_dict['fifth'] = list([1, 2, 3])
我能想到的最佳解决方案是使用 void 指向重新解释的数据的指针,或者可能是具有某些类型限制的某种运行时多态性?
【问题讨论】:
-
@CalebGoodman 我真的不这么认为。该操作询问是否插入任意类型的元素。
-
坦率地说,在 Python 容器中使用异构类型虽然绝对有可能,但我认为这不是“最重要的功能”之一。事实上,我会说在容器中使用异构类型几乎总是糟糕的设计。
-
也相关:Different key type in a map。这表明它可以通过提升来实现,而在没有提升的情况下做到这一点(至少在提出问题时)更加有限。不知道 C++17 的添加(例如
std::variant/std::any)是否有帮助。