自定义数据iostream

Haz*_*Dot 3 c++ iostream stream binary-data

我有一个定义为的数据结构

struct myDataStruct
{
   int32_t header;
   int16_t data[8];
}
Run Code Online (Sandbox Code Playgroud)

我想获取一个字符流并将其转换为myData流.我应该扩展哪个流类?我想创建一个自定义流类,以便我可以做类似的事情

myDataStruct myData;
myDataStruct myDataArray[10];

myDataStream(ifstream("mydatafile.dat"));
myDataStream.get(myData);
myDataStream.read(myDataArray, 10);
Run Code Online (Sandbox Code Playgroud)

sbi*_*sbi 5

而不是myDataStream.get(myData),你做的是operator>>数据类型的重载:

std::istream& operator>>(std::istream& is, myDataStruct& obj)
{
  // read from is into obj
  return is;
}
Run Code Online (Sandbox Code Playgroud)

如果你想读入一个数组,只需写一个循环:

for( std::size_t idx=0; idx<10; ++idx ) 
{
   myDataStruct tmp;
   if( is >> tmp )
     myDataArray[idx] = tmp;
   else
     throw "input stream broken!";
}
Run Code Online (Sandbox Code Playgroud)

使用函数模板,您还应该能够为右侧的数组重载运算符(但我从未尝试过):

template< std::size_t N >
std::istream& operator>>(std::istream& is, myDataStruct (&myDataArray)[N])
{
  // use loop as above, using N instead of the 10
}
Run Code Online (Sandbox Code Playgroud)

但我无法确定这是华丽还是卑鄙.