【发布时间】:2017-03-17 11:14:57
【问题描述】:
我有一些提供基本 IO 的 Stream 类。 我希望能够编写这样的代码:
Image img = Image(StreamReader("filepath"));
不幸的是,根据标准,将右值引用绑定到非 const 左值引用似乎是非法的,就像 Image ctor 的参数一样。
我不能将参数设为 const 引用,因为 Streams 需要更新它们的状态,例如当前流位置。
将这些 Stream 属性设置为可变或 const 对我来说似乎是糟糕的设计,因为这些状态对用户有明显的影响。
我必须有哪些选项才能完成这项工作,最好不要为每个“类似图像”的类提供两个几乎相同的构造函数?
提前致谢。
【问题讨论】:
-
转发参考?
-
您提到了两个几乎相同的构造函数。你的其他构造函数是什么样的?
-
我的意思是没有一个构造函数采用左值和一个采用右值。
-
啊。我误解了这个问题。 TBH 我只会添加两个构造函数,而不是乱用完美的转发。您可以通过调用
StreamReader&重载来实现StreamReader&&重载。亲吻。 -
您似乎使用了
StreamReader,只提供采用StreamReader&&的构造函数可能有意义(因此当它还不是临时的时,强制用户使用std::move)。
标签: c++ rvalue-reference