gpt4 book ai didi

c++ - 是否有更好的替代std::unordered_map 将字符串映射到任何类型的值?

转载 作者:行者123 更新时间:2023-12-02 09:59:59 26 4
gpt4 key购买 nike

我正在编写一个输出到控制台的Log函数。我最终想要使用的语法如下所示:

Log(Info, 
"Message",
{ {"Key1", value1},
{"Key2", value2} })
其中 value1value2可能不是同一类型(可能是名称的std::string和其年龄的整数)。在输出到控制台之前,是否有更好的方法使用 std::unordered_map<std::string, std::any>存储键值对并使用 std::any_cast推断类型?

最佳答案

如果可能的类型数量有限,请使用 std::variant 而不是std::any,例如

std::unordered_map<std::string, std::variant<int, std::string, etc>>
您可以通过 std::variant std::variant::index() 来查询 std::holds_alternative()当前持有的类型,然后通过 std::get() 检索值(例如,在 index()块中使用 get()switch()会很有用)。或者,如果数据与给定类型匹配,则可以使用 std::get_if() 获得指向数据的指针。
或者,您可以使用 std::visit() ,它在记录用例中很有用,因为您可以提供单独的访问者来记录所需的每种可能的类型。

关于c++ - 是否有更好的替代std::unordered_map <std::string,std::any>将字符串映射到任何类型的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63122784/

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