【发布时间】:2015-12-10 01:47:34
【问题描述】:
目前,我正在像这样使用std::vector<char>:
char data, data2, data3;
vec.push_back(data);
vec.push_back(data2);
vec.push_back(data3);
但是,由于我存储的是二进制数据,有时我需要推送不同大小的数据(即不是单个字符),并且我需要手动将这些数据拆分为单个字节,这既不方便也不可读。
这样的东西会很完美:
buffer.push<int>(some_int); // some_int = 0xAABBCCDD
buffer.push<char>(some_char); // some_char = 0xFF
buffer.push("arbitrary_data", arbitrary_length);
生成的内存将是:
AA BB CC DD FF ...........
// ^ int
// ^ char
有没有标准的方法,或者我需要库/自己的实现?
【问题讨论】:
-
虽然这不是最好的方法,但您始终可以使用
std::vector<void*>。 -
您可以使用 unsigned char 向量,在需要新项目时调整其大小,然后在数组中构造该类型。
-
没有标准的方法。
boost::any对于您正在尝试做的事情很方便。 -
@JamesRoot:除了位置可能未对齐。
-
@AcidShout:你没有。这就是为什么 James 的评论和 KemyLand 的回答是错误的。顺便说一句,不要假设对齐总是到 4 个字节。检查
alignof(T)。在相关说明中,也不要假设字节序。推送0xAABBCCDD后很可能会得到0xDD 0xCC 0xBB 0xAA。