将ifstream转换为istream

时间:2010-11-02 17:05:35

标签: 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;
.....
}

3 个答案:

答案 0 :(得分:25)

不需要演员表。

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

答案 1 :(得分:1)

尝试:

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

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

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

istream

答案 2 :(得分:0)

std::istream *istreamObj = dynamic_cast<std::istream *>(&ifStreamObj)