转发左值和右值最佳做法

时间:2015-08-01 21:49:35

标签: c++11

我有一个从其参数构造对象的函数,定义如下:

template<class T, class ... Args>
void construct(Args && ... args){
    T(std::forward<Args>(args)...);
}

我还有两个传递给构造函数的辅助函数。

tempalte<class T, class ... Args>
void add(Args && ... args){
    construct<T>(std::forward<Args>(args)...);
}

tempalte<class T>
void add(T t){
    construct<T>(std::move(t));
}

add的第一次重载是我在通话中明确指定T的地方,例如通过add<MyType>(1,2,"string");。在单个参数的特定情况下,我希望T参数与单个参数的类型相同,因此我不必明确键入<MyType>,例如add( existing_MyType_object )

第二个重载应该是左值(在这种情况下它应该调用copy ctor)或rvalue(它应该调用move ctor)。我的问题是,这是最好的方法吗?我为第二个重载传递值,因为我可以复制构造或移动构造。我也想知道如果我将rvalue传递给第二个重载,移动构造是否会正常工作,即std::forwardstd::move一起工作,就像我期望的那样。

根据一些评论建议,我已将第二个重载更改为:

tempalte<class T>
void add(T && t){
    construct<T>(std::forward<T>(t));
}

0 个答案:

没有答案