我正在创建一个存储有关特定数据源的元数据的类。元数据以树的形式结构化,与 XML 的结构化方式非常相似。元数据值可以是整数、十进制或字符串值。
我很好奇 C++ 中是否有一种好方法可以为这种情况存储变体数据。我希望变体使用标准库,因此我避免使用可用的 COM、Ole 和 SQL VARIANT 类型。
我当前的解决方案如下所示:
enum MetaValueType
{
MetaChar,
MetaString,
MetaShort,
MetaInt,
MetaFloat,
MetaDouble
};
union MetaUnion
{
char cValue;
short sValue;
int iValue;
float fValue;
double dValue;
};
class MetaValue
{
...
private:
MetaValueType ValueType;
std::string StringValue;
MetaUnion VariantValue;
};
MetaValue 类具有各种 Get 函数,用于获取当前存储的变量值,但它最终使每个值查询成为 if/else if 语句的一大块,以确定我正在寻找的值。
我还探索了将值仅存储为字符串,并执行转换以获取不同的变体类型,但据我所知,这会导致一堆内部字符串解析和错误处理,这并不漂亮,打开使用浮点值解决了一大堆旧的精度和数据丢失问题,并且仍然不能消除上述 if/else if 问题的查询。
是否有人使用标准库实现或看到了更清洁的用于 C++ 变体数据类型的东西?