gpt4 book ai didi

c++ - boost 变体 : How can I do a visitor that returns the type that was set?

转载 作者:行者123 更新时间:2023-11-28 07:45:23 25 4
gpt4 key购买 nike

我正在尝试编写一个使用 boost:variant 作为值的通用映射。我坚持尝试编写将返回适当类型的 get(std::string key) 函数。

这是我到目前为止的想法:

 class GenericHashMap {
private:
std::map< std::string, boost::variant<int, bool, double, std::string> > genericMap;

public:
template<typename T>
bool getValue(const std::string & key, T & value) {
if ( _map.find(key) == _map.end() ) {
return false;
}
T * valuePtr = boost::get<T>(_map[key]);
if (valuePtr == NULL) {
return false;
}
value = *valuePtr;
return true;
}
}

我很好奇应该如何处理迭代器?是否值得制作我自己的嵌套迭代器或只返回嵌套的 std::map。

编辑

我添加了我希望实现的类设计(即通用 HashMap )。我遇到的问题是,我想要一种方法让用户查询特定键是否存储为特定类型。

最佳答案

如果您有这样的问题,这可能意味着您应该使用访问者而不是想从您的变体中获取值(value)。这通常是使用 boost::variant 的方式。

如果您考虑一下:您不想为特定键值硬连接特定类型。否则,这意味着您将失去 boost::variant 的所有功能。这意味着您应该为每个键集设置不同的映射(正如您静态了解的那样,您不应该将所有内容都放在同一个映射中)。

boost::variant 确实可以帮助您进行动态调度,而不是静态分支。

注意:在您的示例中,您在找到项目时查找了两次,您应该存储 find 的结果而不是丢弃它,从而节省第二次查找。

关于c++ - boost 变体 : How can I do a visitor that returns the type that was set?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14992548/

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