我需要我的程序执行以下操作之一:
- 从标准输入读取并写入标准输出
- 从给定文件中读取并写入另一个给定文件
工作方式只在运行时确定。
这是我尝试过的
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)
按值传递programIStream
和programOStream
。这是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;
这个构造函数称为复制构造函数。它被标记为显式删除,这意味着这种情况完全不应该发生。