kio*_*o89 4 c++ pass-by-value perfect-forwarding c++11
我正在阅读封装的多态性,我遇到了一段代码:
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;
};
Run Code Online (Sandbox Code Playgroud)
在模型构造函数中转发impl有什么意义?
如果通过值传递参数,它是否有意义?
如果左值参考类型(例如)Model<T>在哪里T是X&合法的(根据模型的文档),那么这forward是在这里使用的正确工具.否则(如果T应该始终是对象类型),move是正确的工具.
话虽这么说,clone成员函数使它看起来T应该只是一个对象类型.因此,move这将是一个更好的工具.在这种情况下forward,技术上并不是错误的,而只是令人困惑,因为它提出了OP所要求的问题.
| 归档时间: |
|
| 查看次数: |
308 次 |
| 最近记录: |