我想要一个istream类型的变量,它可以保存文件的内容或字符串.我们的想法是,如果没有指定文件,那么istream类型的变量将被赋予一个字符串.
std::ifstream file(this->_path)
和
std::istringstream iss(stringSomething);
至
std::istream is
我试过将它们分配给istream变量,就像我从其他从同一基类继承的对象那样,但是没有用.
如何将istringstream和ifstream分配给istream变量?
解决方法:
基类指针可以指向派生类数据. std :: istringstream和std :: ifstream都是从std :: istream派生的,所以我们可以这样做:
//Note that std::unique_ptr is better that raw pointers
std::unique_ptr<std::istream> stream;
//stream holds a file stream
stream = std::make_unique<std::ifstream>(std::ifstream{ this->_path });
//stream holds a string
stream = std::make_unique<std::istringstream>(std::istringstream{});
现在你只需要使用提取内容
std::string s;
(*stream) >> s;