任意/变体的c++容器,每个元素具有不变的类型

C++ container of any/variant each element having unchanging type

本文关键字:元素 类型 c++ 容器 任意      更新时间:2023-10-16

我使用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()。因此,您将无法通过此函数添加新的设置/值对,但基于伪代码,似乎是有意的。