任意/变体的c++容器,每个元素具有不变的类型
C++ container of any/variant each element having unchanging type
我使用std::map<const char*, boost::any>
来存储我的库的设置。每个设置只使用一个底层值类型,我希望在对set()
或类似的配置调用期间强制执行这一点。使用正确类型的默认值初始化设置。
下面是一些伪代码,希望能显示我想要实现的目标:
using namespace std;
using namespace boost;
void set(map<const char *, any> &settings, const char *key, any &value)
{
if (type_of(value) != type_of(settings[key]) throw wrong_type_exception();
settings[key] = value;
}
有可能在运行时捕获像这样的类型错误吗?如果可能的话,我不喜欢在我的API中使用模板函数。
我已经使用了boost::any
,但如果这是唯一可行的解决方案,可能会考虑boost::variant的which()
。
value.type() != settings[key].type()
如果settings[key]
之前不存在,则settings[key].type()
是typeid(void)
,当且仅当value
为空时比较等于value.type()
。因此,您将无法通过此函数添加新的设置/值对,但基于伪代码,似乎是有意的。
相关文章:
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 如何将 n 个连续元素插入到元素类型不可复制的 std::vector 中?
- 元函数使用 decltype 返回元素类型
- STDLIB中容器元素类型有什么要求?
- 使用 dectlype 推断模板元素类型中的数据类型是否正确?
- boost multi_index - 如果元素类型仅支持移动语义,如何遍历它?
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 使用声明中的元素类型隐式初始化 std::array
- 使用 SFINAE 和 void_t 来确定容器内的元素类型
- 键入 trait 以获取 std::array 或 C 样式数组的元素类型
- 如何在QTScript中将QLIST内部的QMAP注册为元素类型
- 关联容器,比较函数不是元素类型的一部分吗?
- 特征稀疏矩阵的 CoeffRef 中的错误,元素类型为向量
- 在编译时间检查模板参数类型是否设置或多键,并且容器的元素类型是算术的
- 从函数模板参数中自动推论对容器的元素类型
- 直接获取基于范围的循环中的元素类型 **例如"using"
- 定义指向 C++ 中相同元素类型的元素
- 如何在C++中一一阅读 CIN?元素类型不同
- 如何从STL容器实例中获取元素类型
- 容器的const_cast元素类型