gpt4 book ai didi

python - 将多种类型存储为 C++ 字典中的值?

转载 作者:太空狗 更新时间:2023-10-29 21:09:59 25 4
gpt4 key购买 nike

我想编写一个 C++ 对象,其行为几乎等同于 Python 字典。 C++ 的 std::mapstd::unordered_map 提供了 Python 字典已有的一些功能,但缺少最重要的功能之一,即能够添加任意对象和类型。即使不可能,您离实现 Python 字典的功能还有多远?

之前的几个问题(herehere)未能处理向字典添加多个类型的问题。

例如,我希望能够在 C++ 中做这样的事情:

my_dict = {'first': 1,
'second': "string",
'third': 3.5,
'fourth': my_object}
my_dict['fifth'] = list([1, 2, 3])

我认为最好的解决方案是使用 void 指针来重新解释数据,或者可能是某种具有某些类型限制的运行时多态性?

最佳答案

The best solutions that I can think would be like using void pointers to data which get reinterpreted, or perhaps some kind of run-time polymorphism with some type restrictions?

在我看来,现代 C++ 中的许多 void 指针和指针的许多重新解释应该是糟糕设计的信号。我相信多态性是一种可行的方法。

此外,如果您要使用固定数量的类型,请考虑使用 C++17 的 std::anystd::variant这是一个更现代的 union

#include <iostream>
#include <map>
#include <string>
#include <variant>

typedef std::map<std::variant<int, std::string>, std::variant<int, std::string>> Dict;

int main(){
Dict d;
d["key"] = 1;
d[5] = "woah";
std::cout << std::get<int>(d["key"]) << std::endl; // prints 1

// edit: print all the keys in d
for(auto& k_v: d){
std::visit(
[](auto& value){std::cout << value << ' ';},
k_v.first // k_v.second to print all values in d
);
}

}

上面的示例在某些用例中可能很有用。

另请查看 json 对象是如何在任何 C++ json 库中实现的。这可能会有所帮助。

编辑:我添加了一个 std::visit 的示例,它遍历我们字典中的键。

关于python - 将多种类型存储为 C++ 字典中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56350891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com