从输入流中读取std :: array

时间:2018-11-12 13:59:50

标签: c++ istream stdarray

我想完成以下工作(由于>>的{​​{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>的使用确实很有帮助,所以我想知道是否有原因未实现它,或者我是否需要自己实现。

2 个答案:

答案 0 :(得分:4)

它不是标准实现,因为没有一些方法可以读取/写入数组的某些示例:

  1. 作为二进制字符流
  2. 作为逗号分隔的列表(如果您的字符之一是逗号怎么办?)
  3. 以空格分隔的列表(如果您的字符之一是空格?)

然后,当您在该数组中添加模板类时,它将变得更加复杂。您如何编写数组数组?

出于相同的原因,没有一个STL容器定义流运算符。

答案 1 :(得分:4)

如果您不需要性能(不需要2字节),则此方法是我的最爱,它基于标准算法:

std::copy_n(std::istream_iterator<char>{stream}, 2, begin(MAGIC_BYTES))

现在MAGIC_BYTES可以是vectorstring或其他具有随机访问权限的容器!