Boost变量:我如何做一个返回已设置类型的访问者
Boost Variant : How can I do a visitor that returns the type that was set?
我正在尝试编写一个使用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)。我遇到的问题是,我想让用户查询特定密钥是否存储为特定类型。
如果您有这样的问题,这可能意味着您应该使用访问者,而不是希望从您的变体中获得价值。这通常是使用boost::variant
的方式。
如果你想一想:你不想为特定的键值硬连接特定的类型。否则,就意味着你失去了boost::variant
的所有力量。这意味着每个键集都应该有不同的映射(正如你静态地知道的那样,你不应该把所有东西都放在同一个映射中)。
boost::variant
在这里真正帮助您进行动态调度,而不是静态分支。
注意:在您的示例中,当您的项目被找到时,您会查找两次,您应该存储find
的结果,而不是丢弃它,这样可以省去第二次查找。
相关文章:
- 何时包含内置类型和运算符的标头?
- 基本类型与内置类型有什么区别C++
- 指内置类型的文字
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- 像自定义类一样构造的指针(内置类型)如何工作?
- 内置类型与用户定义的类型 C++
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- C++内置类型的基于类型的调度
- 函数重载:内置类型与用户定义类型
- 内置类型的构造函数初始化
- 内置类型的运算符函数
- 内置类型的重载运算符
- 在C++中,如何销毁内置类型?
- 为什么内置类型的对象上的溢出会导致异常/未定义的行为?
- 重新声明C++内置类型"wchar_t"Windows 10 过剩 CPP
- 可变类类型的丢弃值表达式的行为与可变内置类型的丢弃值表达式的行为不同
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- 如何为内置类型添加成员功能,例如C 中的整数
- 是否允许使用标准库类型和内置类型过载操作员
- 从没有内置类型的c++调用Cython