提问人:kiokko89 提问时间:5/9/2015 最后编辑:Jonny Ckiokko89 更新时间:5/10/2015 访问量:574
std::forward with pass-by-value 参数
std::forward with pass-by-value argument
问:
我正在阅读有关封装多态性的文章,我遇到了一段这样的代码:
template <typename T>
struct Model<T> : Concept
{
Model<T>(T impl) :
mImpl(std::forward<T>(impl))
{
}
virtual Concept* clone() const override
{
return new Model<T>(mImpl)
}
virtual void operator (const LogMessage::Meta& meta, const std::string& message) override
{
mImpl(meta, message);
}
T mImpl;
};
在 Model 构造函数中转发 impl 有什么意义?
如果参数是按值传递的,那么转发参数是否有意义?
答:
5赞
Howard Hinnant
5/9/2015
#1
如果 where 是左值引用类型(例如)是合法的(根据 Model 的文档),那么这里使用的是正确的工具。否则(如果应始终是对象类型),则是正确的工具。Model<T>
T
X&
forward
T
move
话虽如此,成员函数使它看起来应该只是一个对象类型。因此,在这里使用将是一个更好的工具。在这种情况下,在技术上并没有错,只是令人困惑,因为它提出了 OP 提出的问题。clone
T
move
forward
评论
1赞
kiokko89
5/9/2015
感谢您的回复,也许为了清楚起见,我应该发布我正在阅读的所有文章:链接。这对我来说可能有点太高级了,但你的回答对我帮助很大。谢谢
下一个:按值传递的速度要快得多吗?
评论
std::forward