堆栈上的 C++ 流多态性?

标签 c++ stl stream polymorphism istream

我想做这样的事情:

std::wistream input = std::wifstream(text);
if (!input) input = std::wistringstream(text);
// read from input

即将文本解释为文件名,或者如果不存在这样的文件,则使用其内容而不是文件的内容。

我当然可以使用 std::wistream * input 然后为实际流使用 newdelete。但是,我必须将所有这些封装在一个类中(构造函数和析构函数,即用于异常安全的适当 RAII)。

是否有另一种在堆栈上执行此操作的方法?

最佳答案

您可以将与 std::wistream& input 一起工作的逻辑抽象成它自己的函数,然后用 std::wifstream 调用它>std::wistringstream 视情况而定。

关于堆栈上的 C++ 流多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7621944/

相关文章:

javascript - mysql实现流读和流插入

c++ - C++使用位OR运算符枚举

c++ - 根据条件拆分 STL 列表

c++ - 使用 std::transform 转换 std::vector<struct{key; val;}> 到 std::map<key, val>

带指针的映射的 C++ 输出

java - 在java中使用DatagramChannel发送视频

java - Flink Tumble Window 触发时间

c++ - 为什么这个无锁堆栈类中的 'deleting' 节点会导致竞争条件?

c# - 从频率响应计算 FIR 系数

c++ - 每次我通过 ifstream 读取特定输入时,输入都会发生变化,可能是 int 溢出