我如何从标准流中导出自己的流
How can I derive my own stream from a standard stream?
如何从标准流中派生自己的流?
在C#语言中,有一个Stream类,但C++的流太复杂了。
我想要这样的东西:
class my_stream : public std::stream
{
// How to derive?
};
void using_a_stream(std::stream* s)
{
*s << "Hello world";
}
void main()
{
std::stream s1;
std::fstream s2("C:\test.txt");
my_stream s3;
using_a_stream(&s1);
using_a_stream(&s2);
using_a_stream(&s3);
}
注意:该代码只是一个示例,可能是无效的C++程序。谢谢
我认为这个问题有三个层次的答案:
第1级:它很复杂,尤其是如果你是C++的新手,请立即停止。只有当你觉得有冒险精神时,才可以继续升级到2级。
第2级:使用一些库,使创建流更容易。我建议使用Boost.IOStreams库。它使创建自己的流和streambufs变得更加容易。如果您仍然不满意,请继续升级到第3级。
第3级:您必须从std::streambuf
派生并修改其行为以满足您的需求。然后,您必须将streambuf
插入自己的流中。
你能描述一下你自己的streamclass应该做什么吗?仅仅问how
而不问what
并不是获得建设性答案的最佳方式。
也许您应该看看boost::iostream
,因为有一种更简单、更安全的方法可以编写自己的iostream
类。
不要。
iostreams
是一个糟糕的接口。它也缺乏很多功能,性能也很差。
- C格式的I/O函数(printf、sprintf等)是否比IOStream更受欢迎?如果是,为什么
- C程序员开始编写C++的坏习惯是什么
- 我应该在C++代码中使用printf吗
- 在C++中使用C特性是一种不好的做法吗
- 部分截断C中的流(fstream或ofstream)++
相关文章:
- 使用CMake检测支持的C++标准
- 没有为自己的结构调用列表推回方法
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- C++从对象自己的类中删除对象
- 使用 std::optional,而不是自己的结构
- 没有取消引用/解包对象的标准方法?
- 子轴围绕父轴而不是他自己的轴旋转
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++ 如何为自己的迭代器类从迭代器转换为const_iterator?
- 重载 + 自己的类和 std::string 的运算符
- 任何用于 boost::p roperty 树的标准库实现
- 类无法访问自己的私有静态 constexpr 方法 - Clang bug?
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 使用库时的标准 - 使用库的数据类型 VS 创建我自己的类型?
- 拥有自己的标题与标准标头相同的标题是不确定的
- C++ 自己在标准::列表中的比较
- 不能在标准向量中插入自己的结构,但是字符串可以
- 我如何从标准流中导出自己的流
- visual C++标准是否要求自己的迭代器是另一个可移动/可复制的