我正在使用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中读取它......
答案 0 :(得分:3)
也许您可以编写类似于VCL TStreamAdapter的适配器/代理类,它实现了TStream的IStream接口。
答案 1 :(得分:1)
好吧,我对C ++知之甚少,但我知道如何将两个具有类似功能的不兼容类混合在一起,而且我知道如何使用包装类。在我看来,C ++层次结构中的基类流是定义方法的抽象类,但是留给后代以不同的方式实现它们。因此,创建一个从iostream
下降的类(大多数Delphi流是双向的)并在其构造函数中获取TStream对象,然后通过调用内部{{上的等效方法来实现iostream
方法。 1}}对象。