任何/变体的C ++容器,每个元素都具有不变的类型

时间:2011-12-05 10:57:36

标签: c++ boost-variant boost-any

我正在使用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()

1 个答案:

答案 0 :(得分:2)

value.type() != settings[key].type()

如果以前不存在settings[key],那么settings[key].type()typeid(void),当且仅当value.type()为空时才会与value进行比较。因此,您将无法通过此函数添加新的设置/值对,而是基于似乎有用的伪代码。