我有一个从其参数构造对象的函数,定义如下:
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::forward
与std::move
一起工作,就像我期望的那样。
根据一些评论建议,我已将第二个重载更改为:
tempalte<class T>
void add(T && t){
construct<T>(std::forward<T>(t));
}