如何将对std :: streambuf的引用传递给需要std :: istream&的方法?

时间:2018-07-31 17:45:49

标签: c++ smart-pointers

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

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

std::streambuf

如何将std::unique_ptr<std::streambuf> sb = getStreamBuf(); Object(std::istream& sRef) 转换为sb

1 个答案:

答案 0 :(得分:4)

您将无法直接进行。由于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());