【发布时间】:2017-04-08 01:30:57
【问题描述】:
我想将 Qt C++11 函数移植到标准 C++11。该函数有一个QByteArray 参数,它接受任何类型的数据(文本、二进制数据等)并根据数据计算哈希值。
QByteArray 似乎非常适合,因为它可以携带任何类型的数据,并且具有许多允许从流、设备、字符串等中填充数据的功能。它甚至可以包装数据而无需使用fromRawData().
是否有提供类似灵活性的标准 C++11 解决方案?目前我倾向于使用旧的void* plus size。
【问题讨论】:
-
几乎任何STL container 都可以存储(无符号)字符数组。
-
@Silicomancer 如果您不想要深拷贝,请使用指针和大小。你已经有了它们。大多数标准库操作都在 iterator 范围内工作,因此将
ptr, ptr+size作为范围传递是很常见的。更直接地说,没有什么能与 QByteArray 提供的功能广度相媲美。其中大部分都需要您实现该行为。 -
@RawN ... 在该范围内进行值复制。 OP 提到的具体方法是fromRawData,除非您遇到严重的 std::allocator 重载(坦率地说,这不值得麻烦),否则没有类似的方法可以通过 vector 使用。跨度>
-
std::vector<uint8_t>在我看来是QByteArray的明显替代品,如果您只想要一个可以容纳任意二进制数据的容器.. -
希望我们得到
std::array_view,这在这种情况下会很好用。现在我认为你可以将它作为核心指南库的一部分。
标签: c++ qt c++11 qbytearray