如何在c++中写入/读取未知的输入/输出流



我需要我的程序执行以下操作之一:

  1. 从标准输入读取并写入标准输出
  2. 从给定文件中读取并写入另一个给定文件

工作方式只在运行时确定。

这是我尝试过的

void runProgram(std::istream programIStream, std::ostream programOStream)
{
    int x;
    programIStream >> x; // Reading from program input stream
    programOStream << "Writing to program output stream" << std::endl;
}

int main(int argc, char* argv[])
{
    if(argc == 3)
    {
        std::ifstream ifs;
        ifs.open(argv[1], std::ios::in);
        std::ofstream ofs;
        ofs.open(argv[2], std::ios::out);
        runProgram(ifs, ofs);
    }
    else
    {
        runProgram(std::cin, std::cout);
    }
    return 0;
}

我以为继承会解决所有问题,但这行不通。

做我需要的事情的正确方法是什么?

要真正做到这一点,您必须这样做(通过引用传递):

void runProgram(std::istream& programIStream, std::ostream& programOStream)

按值传递programIStreamprogramOStream。这是clang在编译代码时抛出的错误(如std::istream):

error: call to deleted constructor of 'std::istream' (aka 'basic_istream<char>')
...
note: declared protected here
   basic_istream(const basic_istream&) = delete;

这个构造函数称为复制构造函数。它被标记为显式删除,这意味着这种情况完全不应该发生。

相关内容

  • 没有找到相关文章

最新更新