gpt4 book ai didi

c++ - std::getline with char* 到字符串

转载 作者:太空宇宙 更新时间:2023-11-03 10:27:28 26 4
gpt4 key购买 nike

我有这段读取文件的代码:

MyObject* LoadObject(wstring filePath)
{
ifstream fileReader;
fileReader.open(filePath);
if (fileReader.is_open())
{
string currentLine;
//std::basic_istream &std::getline
while (getline(fileReader, currentLine))
{
//Logic for loading MyObject* here
}
}
}

现在我也希望能够从 char* 缓冲区读取数据,有没有一种方法可以保持相同的读取逻辑,而只是改变我读取行的方式?

MyObject* LoadObject(char* buffer, ulong length)
{
//Change how I read each line

//Keep the same logic for loading MyObject*
}

最佳答案

将您的工作转移到需要 std::istream & 来读取的内容中:

MyObject *ReadObject(std::istream &is) 
{
string currentLine;
while (getline(is, currentLine))
{
//Logic for loading MyObject* here
}
}

现在让你的其他函数使用这个:

MyObject* LoadObject(wstring filePath)
{
ifstream fileReader;
fileReader.open(filePath);
if (fileReader.is_open())
{
return ReadObject(fileReader);
}
... //return something else
}

MyObject* LoadObject(char* buffer, ulong length)
{
std::string str(buffer, length);
std::istringsteam iss(str);
return ReadObject(iss);
}

一些小笔记:

  • 通过 const 引用传递 filePath,因为您没有更改它并且不需要拷贝。
  • 如果是 C 字符串,则将 buffer 设为 const char *,因为您不需要修改它。最好使用一个知道长度的参数,而不是依赖调用者来同步两个参数。
  • 考虑按值返回 MyObject,除非您真的需要指针。
  • 考虑以不同方式命名 LoadObject 的两个重载以传达它们的意图。调用者都知道,C 字符串重载也可以是文件路径。

关于c++ - std::getline with char* 到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28702237/

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