C ++中所有流的基类是什么?
C ++中MemoryStream的等价物是什么?
答案 0 :(得分:7)
流有几个共享基类:std::ios::ios_base
是最终的超类,但也有ios
,istream
,ostream
和iostream
用于不同类型的功能。 istream&
和ostream&
是您最常见的用作多态参数类型的内容。
这是一张漂亮的照片:http://www.cplusplus.com/reference/iostream/
我不是.Net的人,所以我不知道如何使用MemoryStream,但std::stringstream
可能至少有一些相同的用途。如果那不能满足您的需求,我认为你会对streambufs感到不安。
答案 1 :(得分:3)
如果你想要一个纯粹的C ++解决方案,那么史蒂夫的回答是正确的方向。
如果您碰巧在Windows上运行并且不介意使用COM,则IStream接口与System.IO.Stream紧密匹配。 CreateStreamOnHGlobal将导致构建在内存缓冲区上的IStream,就像MemoryStream一样。
答案 2 :(得分:0)
一个基类是std::ios::ios_base
,但是所有与流相关的类都是模板(这让我在2001年引起了很多悲痛,转换了一些非常聪明的预标准C ++代码)。这允许流与char
,wchar_t
一起使用,以及有人想要用作角色的任何其他类型。在C ++中引用单个基类不一定是可能的,因为该语言具有多个继承并且库使用它,但在这种情况下看起来ios_base
符合条件,尽管它提供格式功能而不是I / O
我不知道.NET流如何在低级别上工作,但C ++流在表面下相当复杂。
如果您要查找的内容与MemoryStream
类似,那么我认为stringstream
可能填写帐单,或者可能已弃用strstream
(已弃用,但仍在我见过的C ++ 0x标准的最新草案,IIRC允许您将流附加到选定的内存区域。
答案 3 :(得分:0)
在MSDN上查看System.IO.Stream的文档,它似乎更接近C ++ streambuf而不是C ++流。
在C ++ IOStreams库中,有两层:
问题在于,除了格式化界面之外,流还会或多或少直接暴露其streambuf的功能,因此流可以用于执行非格式化的I / O 。例如,对于输出,basic_ostream具有多个运算符<<对于格式化输出,但它也有“put”和“write”成员允许(或多或少)绕过流并直接写入包含的streambuf。