首页 > 解决方案 > 如何将对 std::streambuf 的引用传递给期望 std::istream& 的方法?

问题描述

我有一个指向 a 的唯一指针streambuf,我想将它传递给一个采用输入流引用的方法,这样我就可以使用流中的字节来实例化一个对象。

如何将 传递std::streambuf给对象方法?

std::unique_ptr<std::streambuf> sb = getStreamBuf();
Object(std::istream& sRef) 

如何转换sbsRef

标签: c++smart-pointers

解决方案


你将无法直接。由于Object只需要一个非常量左值引用,因此您需要一个命名对象来传递给它。那将要求您拥有类似的东西

std::unique_ptr<std::streambuf> sb = getStreamBuf();
std::istream passer{sb.get()};
Object(passer);

如果您有 C++11 或更高版本,您可以将签名更改为

Object(std::istream&& sRef) 

然后你可以

std::unique_ptr<std::streambuf> sb = getStreamBuf();
Object(sb.get());

推荐阅读