使用VS2010在C ++中开发程序时,我可以定义
std::istream streamRead(ReadBuf&); // struct ReadBuf : public std::streambuf declared before
并在我的程序中的多个函数中使用此streamRead
?
如果没有,任何人都可以建议我如何使用getline
阅读流。我必须从不同的函数中读取相同的流。
提前谢谢。
编辑:
我的头文件中声明的结构如下:
struct ReadBuf : public std::streambuf
{
ReadBuf(PBYTE s,size_t n)
{
setg((char*)s,(char*) s,( char*)s + n);
}
};
我在内存中有一个缓冲区,我程序的输入是它的指针和大小。使用上述结构,我将其复制到streambuffer。现在我必须逐行阅读这个streambuffer。这是我的要求。
例如我的一些功能是:
int GetSessionN(int session_id,SessionDetail &N_session);
int GetInstanceId(string header,SessionDetail &N_session);
int GetDriverDetails(string body_data,SessionDetail &N_session);
我必须使用n
读取流中的第一个GetSessionN
行,然后使用下一个函数中的连续n
行,依此类推。
这是我初始化ReadBuf
的对象的地方。我无法在全球范围内初始化它。
int SetupLogReader::ProcessLogFile(PBYTE &mem_ptr, ULONG &size)
{
string read;
ReadBuf buf(mem_ptr, size);
istream streamRead(&buf);// Not able use StreamRead declared in header here.
}
答案 0 :(得分:2)
你不应该在函数中返回它时复制流,但是引用它,即:
std::istream &streamRead(ReadBuf&){
if (_stream == null){
// create stream
_stream = [newly created stream];
}
return _stream;
}
编辑:
你也可以使用std :: istringstream,因为它已经提供了你正在寻找的功能:
std::string stringvalues = "line1\nline2";
std::istringstream iss (stringvalues);
for (int n=0; n<2; n++)
{
char val[256];
iss.getline(val, 256);
std::cout << val << '\n';
}