将ifstream转换为istream

Ano*_*ous 12 c++ casting

如何将ifstream投射到istream中.我想因为ifstream是istream的孩子我应该能够这样做但我一直遇到这样的任务有问题.

std::istream & inputStr = std::cin;
  std::ostream & outputStr = std::cout;
  if(argc == 3){
    std::fstream inputFile;
    inputFile.open(argv[1], std::fstream::in);
    if(!inputFile){
        std::cerr << "Error opening input file";
        exit(1);
    }
    inputStr = inputFile;
.....
}
Run Code Online (Sandbox Code Playgroud)

Che*_*Alf 26

不需要演员阵容.

#include <fstream>
int main()
{
    using namespace std;
    ifstream    f;
    istream&    s   = f;
}
Run Code Online (Sandbox Code Playgroud)

  • 这将有助于IMHO提及这是因为多态性,即ifstream是istream的子类的事实.(如果我错了,请纠正我!) (2认同)
  • @ Lee-Man:OP已经提到过(模数术语),所以我没有.干杯, (2认同)

Ste*_*idi 2

尝试:

std::ifstream* myStream;
std::istream* myOtherStream = static_cast<std::istream*>(myStream);
myOtherStream = myStream;   // implicit cast since types are related.
Run Code Online (Sandbox Code Playgroud)

如果您也有对流类型的引用 (&),则同样有效。 static_cast在这种情况下是首选,因为转换是在编译时完成的,如果转换不可能(即不是istream的基类型ifstream),则允许编译器报告错误。

此外,您可能已经知道这一点,您可以将对 an 的指针/引用传递给ifstream任何接受对 a 的指针/引用的函数istream。例如,该语言允许以下内容:

void processStream(const std::istream& stream);

std::ifstream* myStream;
processStream(*myStream);
Run Code Online (Sandbox Code Playgroud)