给定一个带有标准装饰器CTOR的装饰器类
explicit TheDecorator(std::unique_ptr<BaseClass> &&p_rrBase);
我想创建一个成员变量,它是这种装饰器的唯一ptr。我这样试过
unique_ptr<DerivedClass> spToDeco(make_unique<DerivedClass>() ); // class to decorate
m_spDecoration = make_unique<TheDecorator>( move(spToDeco) ); // unique ptr of decorator
使用VS 2010和Scott Meyers实现make_unique(没有可变参数模板,实现了零和一个参数的版本),我得到了错误
error C2780: _Ty &&std::forward(...): expects 1 argument -- 0 provided
我理解,因为“TheDecorator”期望论证能够推进。但是我必须将它编入其中,我如何正确地形成语法?我是否应该在&lt;&gt;中包含一个移动括号?非常感谢您的帮助!
Make_Unique:
namespace std
{
template<typename T>
std::unique_ptr<T> make_unique()
{
return std::unique_ptr<T>( new T() );
}
template<typename T, typename Ts>
std::unique_ptr<T> make_unique(Ts&& params)
{
return std::unique_ptr<T>( new T(std::forward<Ts>()) );
}
}
编辑2:已经解决,必须阅读
template<typename T, typename Ts>
std::unique_ptr<T> make_unique(Ts&& params)
{
return std::unique_ptr<T>( new T(std::forward<Ts>(params)) );
}