我正在使用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()
。
答案 0 :(得分:2)
value.type() != settings[key].type()
如果以前不存在settings[key]
,那么settings[key].type()
为typeid(void)
,当且仅当value.type()
为空时才会与value
进行比较。因此,您将无法通过此函数添加新的设置/值对,而是基于似乎有用的伪代码。