堆栈上的C++流多态性
C++ stream polymorphy on stack?
我想做这样的事情:
std::wistream input = std::wifstream(text);
if (!input) input = std::wistringstream(text);
// read from input
即将文本解释为文件名,或者,如果不存在此类文件,则使用其内容而不是文件的内容。
对于实际流,我当然可以使用std::wistream * input
,然后使用new
和delete
。但是,我必须将所有这些封装在一个类中(构造函数和析构函数,即用于异常安全的适当RAII(。
在堆栈上还有其他方法吗?
您可以将使用std::wistream& input
的逻辑抽象为自己的函数,然后使用std::wifstream
或std::wistringstream
调用它。
我当然可以使用std::wistream*输入,然后对实际流使用new和delete。但是,我必须将所有这些封装在一个类中(构造函数和析构函数,即用于异常安全的适当RAII(。
这就是std::unique_ptr
的作用。只需使用std::unique_ptr<std::istream>
。
在堆栈上还有其他方法吗?
不可能。
由于C++中的所有流类都禁用了复制赋值,因此您无法使用它。这立即意味着您想要的是不可能的。
您是否考虑过使用auto_ptr或unique_ptr来管理wistream指针?
http://www.cplusplus.com/reference/std/memory/auto_ptr/
相关文章:
- 多态性和功能结合
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- C++boost序列化多态性问题
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- 具有智能指针的多态性
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 继承/多态性 - 我是否被迫使用"protected"变量?
- C++ 多态性在代码::块 17.12 中不起作用
- C++ 泛型和多态性:这种模式可行吗?
- 为什么我们实际上需要运行时多态性?
- 如何在这个简单的最小示例中实现多态性?
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 无法初始化已知大小的矢量指针,该大小不会因多态性而更改
- 运行时多态性和dynamic_cast需要澄清
- 如何调用指针类型的方法(禁用多态性)?
- 从基类调用函数的多态性
- 运行时多态性 - 箭头运算符访问了错误的成员?
- 为什么我在虚幻引擎中的多态性和接口方面遇到问题?