我如何将ifstream和ofstream传递给C ++中的相同函数对象?

问题描述 投票:1回答:1

我的用例是创建一个函数,该函数接受fileName,ifsttream / ofstream对象,然后打开该文件以在给定的filestream对象中进行相应的读取/写入。还检查操作是否成功,如果成功,则返回文件流对象。

我的实现如下,并且基于ifstream和ofstream都从fstream派生的假设。

#include <iostream>
#include <fstream>
using namespace std;
void populate_filehandles(const string &inFileName, fstream &filehandle) {
    filehandle.open(inFileName);
    if (!filehandle.is_open()) {
            cout << "input file : " << inFileName << " could not be opened" << endl;
            exit(0);
        }
}
int main () {
    ifstream inFile;
    string inFileName = "abc.txt";
    populate_filehandles(inFileName, inFile);
}

该代码给出了一个错误,ifstream无法转换为fstream。还有其他解决方法吗?

c++ c++14 fstream ifstream fileopener2
1个回答
0
投票

所以,正如其他人所建议的,这是由于std::ifstream并非继承自std::fstream。而是改为it inherits from std::istresm。另一方面,std::istresm。因此,您实际上无法做到这一点。

一些您必须解决的选项:

  1. 模板(如其他人所提到的::)>
  2. std::fstream
  1. 超载:
  2. inherits from std::iostream

但是,这将要求您两次实现相同的功能。不一定是最好的主意,但会起作用。

  1. 通过标志
  2. [C0的有趣之处在于它具有打开文件进行读取或写入的能力(甚至我认为两者都可以)。因此,从理论上讲,您可以添加一个标志来说明要打开的方向:

std::iostream
© www.soinside.com 2019 - 2024. All rights reserved.