如何返回STD文件流
how to return std file streams
我正在为我的应用程序开发一个"文件系统"来处理文件操作,如列出、创建、删除文件和目录,以及获取文件数据。我想使用std::fstream,因为它比C文件处理程序更安全,更容易格式化。但是我不能从函数返回一个流对象(它没有副本c'tor),当我试图返回引用时,我得到一个警告(我不警告并不意味着那么多,但我正试图修复我的应用程序中每一个可能的警告,我做了所有这些直到现在):"警告:返回一个临时的引用"。我能做什么?如果有人遇到这种情况,并找到了更好的处理方法,请告诉我。
编辑:std::ofstream &Filesystem::createFile(const String &str) {
std::ofstream file(str);
return file;
}
这就是我想要达到的。但由于警告,我正在寻找另一种方法。
提前感谢,
Gasim Gasimzada
使用智能指针,类似的东西可能会工作(或一个较新的std::unique_ptr
,等)
std::auto_ptr<std::iostream> foo()
{
return std::auto_ptr<std::iostream>(new fstream(...));
}
在c++中,流对象是可移动的,所以实际上你可以按值返回一个流对象:
// Perfectly valid C++0x
std::ofstream f()
{
return std::ofstream("pwnies.txt");
}
Visual c++ 2010标准库实现包括可移动流,libc++也是如此。如果您需要针对不支持右值引用和可移动流的旧编译器/库实现,则不能这样做,但对于没有任何此类约束的新代码,这是一种方法。
您可以通过引用将fstream
作为参数传递给函数。
fstream obj;
void Modify (fstream &obj) // no return, just pass by reference
{
//...
}
相关文章:
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 如何传递多个 std::文件系统选项?
- 遍历顺序由 std::文件系统directory_iterator给出
- 使 std::fstream 写入文件末尾,但从头开始读取
- 是否可以使用 Python csv 阅读器读取使用 C++ std::setw 生成的文件?
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 'std::wstring_convert'尽可能多地转换(从 UTF8 文件读取块)
- 是否可以使用 std::文件系统获取根名称列表?
- llvm 9在10.15之前的mac版本上支持std::文件系统吗
- std::文件系统根路径如何将自身作为父路径?
- 将 std::文件系统头文件添加到我的程序时出现编译错误
- 使用 std::文件系统替换文件
- std::文件系统和 std::experimental::文件系统问题在不同的编译器中
- XCode链接到STD ::文件系统的哪个库
- 使用 std::文件系统输出作为 LPCWSTR
- Visual Studio 中的 std 文件中的错误
- std文件流的相对路径
- 如何返回STD文件流
- 为什么在 C++1y 中没有接口来获取 std 文件系统库扩展中的用户/组信息