我需要用原始数据填充向量,有时是2个字节,有时是8个...我最终得到了这个模板功能:
enumerate(iterable, start_enumerate_value)
我可以这样填充向量:
template <typename T>
void fillVector(std::vector<uint8_t>& dest, T t)
{
auto ptr = reinterpret_cast<uint8_t*>(&t);
dest.insert(dest.end(),ptr,ptr+sizeof(t));
}
我想知道标准库中是否已经存在类似的东西?
答案 0 :(得分:5)
不,标准库中没有任何东西可以满足您的需求。因此,您的解决方案几乎就是您目前可以使用的解决方案(假设您的目标是进行某种形式的序列化)。
唯一的改进是,您假设uint8_t
是一种可用于别名对象并检查其字节的类型。不必如此。 C ++ 11中唯一的此类类型是char
和unsigned char
。尽管uint8_t
通常在大多数现代体系结构中都使用别名,但这并不是一个硬性要求,但它可以别名特定于平台的8位无符号整数类型(其优点不在此问题范围之内)。因此,要符合标准,请注意以下几点:
static_assert(std::is_same<unsigned char, std::uint8_t>::value, "Oops!");
或者使用您自己的别名作为有效的“字节”类型
namespace myapp { using byte = unsigned char; }
然后交易std::vector<myapp::byte>
。