std :: forward with pass-by-value参数

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有什么意义?

如果通过值传递参数,它是否有意义?

How*_*ant 5

如果左值参考类型(例如)Model<T>在哪里TX&合法的(根据模型的文档),那么这forward是在这里使用的正确工具.否则(如果T应该始终是对象类型),move是正确的工具.

话虽这么说,clone成员函数使它看起来T应该只是一个对象类型.因此,move这将是一个更好的工具.在这种情况下forward,技术上并不是错误的,而只是令人困惑,因为它提出了OP所要求的问题.