C++ 是否可以将类型映射为整数?

C++ 是否可以将类型映射为整数?,c++,C++,考虑以下结构: struct value{ std::vector<UCHAR> raw_data; int type; }; struct值{ std::矢量原始数据; int型; }; 在本例中,type的值可以是{0,1,2} 如果type==0,则向量中的数据表示一个4字节有符号整数 如果type==1,则向量中的数据表示一个2字节有符号整数 如果type==2,则向量中的数据是任意长度的原始字节数组 结构的格式超出了我的控制范围,有30多个类型的可能值

考虑以下结构:

struct value{
    std::vector<UCHAR> raw_data;
    int type;
};
struct值{
std::矢量原始数据;
int型;
};
在本例中,type的值可以是{0,1,2}

如果type==0,则向量中的数据表示一个4字节有符号整数

如果type==1,则向量中的数据表示一个2字节有符号整数

如果type==2,则向量中的数据是任意长度的原始字节数组


结构的格式超出了我的控制范围,有30多个类型的可能值

是否可以在运行时确定类型?可能类似于以下伪代码:

void PrintValue(value & v)
{
    TypeLookup<v.type> val(v); // Assuming the type is supported by cout
    std::cout << val << std::endl;
}
void打印值(值和v)
{
TypeLookup val(v);//假设cout支持该类型
标准::cout
有没有更有效的方法


不。一个切换
类型
就像这样优雅。考虑到你只需要处理3个值,它应该足够优雅。

不,你不能真正做到这一点。没有“类型”允许您将类型传递给函数的变量。但是,模板实际上为您提供了所需的所有功能,而不是在运行时打开变量类型的功能。您可以专门化模板,并且可以创建包含任何类型的“自动”变量(但最终派生自直接添加到源代码的模板或类型)


如果你发现C++中需要动态类型,最好的答案是提升一个级别。从Web上创建或获取JSON(JavaScript对象标记)解析器/包装器,然后在其中传递动态变量。然后你可以查询字段和类型,这样就可以有一个“雇员”,有或没有“标题”。字段,如果说一个国家的海关与另一个国家的海关不同,并且一些地方省略了“Mr”,而其他地方坚持使用它。

此示例仅显示了3个,实际上它是30多个可能的类型。您是否控制可以存储的类型?这些类类型是吗?可能使用联合来代替向量?“结构的格式超出了我的控制“您可以考虑访问者模式,而不是提取值并使用它,将一个通用的可调用性传递给<代码>值,它在其基础类型上进行调用并调用具有其具体值的函数。类似于C++ 17中使用的代码<代码>::访问< <代码> >代码> STD::@我会调查的,谢谢!
int32_t GetValAs32Integer();
int16_t GetValAsShort();
std::vector<UCHAR> GetValAsRaw();