如何混合std :: stream和Delphi TStream?

时间:2010-07-08 09:25:17

标签: c++ delphi c++builder vcl iostream

我正在使用C ++ Builder,我正在尝试将代码慢慢迁移到使用C ++标准库而不是Delphi VCL。

VCL有一个基于TStream类的流式架构,我正在转而使用std::stream。但是,在短期内,我仍然需要一种“混合”使用两种流类型的方法。

我可以使用中间std::stringstream/TStringStream对象来做到这一点,但这似乎有点低效和繁琐。有人有更好的建议吗?

修改

TStream提供与std :: streams类似的功能,但不是从它派生的。您可以创建不同类型的流(TFileStream,TMemoryStream,TStringStream)以及从/向它们读/写数据。请参阅Embarcadero docwiki TStream reference

修改

示例 - 想象一下,我有一个std :: ostream,我已经写了一些东西,我现在想要使用TJPEGImage.SaveToStream(str:TStream)将JPEG图像附加到它上面。而且,我想稍后从std :: istream中读取它......

2 个答案:

答案 0 :(得分:3)

也许您可以编写类似于VCL TStreamAdapter的适配器/代理类,它实现了TStream的IStream接口。

答案 1 :(得分:1)

好吧,我对C ++知之甚少,但我知道如何将两个具有类似功能的不兼容类混合在一起,而且我知道如何使用包装类。在我看来,C ++层次结构中的基类流是定义方法的抽象类,但是留给后代以不同的方式实现它们。因此,创建一个从iostream下降的类(大多数Delphi流是双向的)并在其构造函数中获取TStream对象,然后通过调用内部{{上的等效方法来实现iostream方法。 1}}对象。