我想完成以下工作(由于>>
的{{1}}不会被重载,因此代码将无法编写):
std::array
我知道我可以读constexpr array<char, 2> MAGIC_BYTES { 40, 23 };
void VerifyMagicHeader(istream& stream)
{
//Read in the bytes that should be the magic bytes
array<char, 2> buffer;
stream >> buffer //This is the line that won't compile;
if (buffer != MAGIC_BYTES)
{/*throw exception here...*/}
}
而不是char[2]
并使其正常工作,但这并不那么优雅。这似乎对std::array<char, 2>
的使用确实很有帮助,所以我想知道是否有原因未实现它,或者我是否需要自己实现。
答案 0 :(得分:4)
它不是标准实现,因为没有一些方法可以读取/写入数组的某些示例:
然后,当您在该数组中添加模板类时,它将变得更加复杂。您如何编写数组数组?
出于相同的原因,没有一个STL容器定义流运算符。
答案 1 :(得分:4)
如果您不需要性能(不需要2字节),则此方法是我的最爱,它基于标准算法:
std::copy_n(std::istream_iterator<char>{stream}, 2, begin(MAGIC_BYTES))
现在MAGIC_BYTES
可以是vector
或string
或其他具有随机访问权限的容器!