gpt4 book ai didi

c++ - istream变量可以是类变量吗

转载 作者:行者123 更新时间:2023-11-28 02:38:30 26 4
gpt4 key购买 nike

在使用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);
}
};

我在内存中有一个缓冲区,我的程序的输入是它的指针和大小。使用上面的结构,我将它复制到流缓冲区。现在我必须逐行读取这个流缓冲区。这是我的要求。

例如我的一些功能是:

int GetSessionN(int session_id,SessionDetail &N_session);

int GetInstanceId(string header,SessionDetail &N_session);

int GetDriverDetails(string body_data,SessionDetail &N_session);

我必须使用 GetSessionN 从流中读取前 n 行,然后在下一个函数中读取连续的 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.
}

最佳答案

你不应该在函数中返回它时复制流,而是引用它,即:

std::istream &streamRead(ReadBuf&){
if (_stream == null){
// create stream
_stream = [newly created stream];
}
return _stream;
}

编辑:

您也可以使用 std::istringstream,因为它已经提供了您正在寻找的功能:

来自 istringstream manual :

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';
}

关于c++ - istream变量可以是类变量吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26731345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com