C ++相当于.net Stream?

时间:2010-01-28 12:05:56

标签: c++ visual-studio-2008

C ++中所有流的基类是什么?

C ++中MemoryStream的等价物是什么?

4 个答案:

答案 0 :(得分:7)

流有几个共享基类:std::ios::ios_base是最终的超类,但也有iosistreamostreamiostream用于不同类型的功能。 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 ++代码)。这允许流与charwchar_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库中,有两层:

  • basic_streambuf是较低层,负责实际的I / O,只处理“字符”序列。有各种实现,具体取决于I / O的用途。例如,base_filebuf读取和写入文件,basic_stringbuf读取和写入内存中的字符串。
  • 流(输入的basic_istream,输出的basic_ostream),包含basic_streambuf。流的作用是格式化(即,在streambuf处理的其他类型的值和“字符”序列之间进行转换)。它没有实际的I / O本身;它将它委托给streambuf。

问题在于,除了格式化界面之外,流还会或多或少直接暴露其streambuf的功能,因此流可以用于执行非格式化的I / O 。例如,对于输出,basic_ostream具有多个运算符<<对于格式化输出,但它也有“put”和“write”成员允许(或多或少)绕过流并直接写入包含的streambuf。

相关问题