当处理无符号数据类型时,我需要有一个容纳uint8
,uint16
,uint32
和uint64
类型的通用容器。
拥有void*
并投射上述数据类型对我有帮助,仍然用vector<uint8_t>
替换它们使代码看起来更干净。
void* test = (uint32_t) 100;
VS
按字母方式将相同的内容推送到矢量测试;
这将是一个更好,更清洁的解决方案。
PS:由于模块的限制,我无法使用提升。
答案 0 :(得分:1)
您可以使用union
来存储和访问数据。这将允许联盟的所有成员占用相同的内存,您可以访问相应的数据类型而无需进行强制转换。
union UintData
{
uint8_t v8;
uint16_t v16;
uint32_t v32;
uint64_t v64;
};
std::vector<UintData> data;
UintData test;
test.v32 = 0xffffffff;
data.push_back(data);
访问数据时,请确保只访问当前活动的成员(最后一个成员集),否则行为未定义。
答案 1 :(得分:0)
union可能是解决方案,但我想知道在推送uint8_t,uint16_t,uint32_t和uint64_t之后联合向量的大小是什么......?
我很有趣的简单解决方案,所以我会尝试
std::vector<uint64_t>
这种情况下,您可以插入所有值。