C++11 转发左值和右值最佳实践

C++11 转发左值和右值最佳实践,c++11,C++11,我有一个函数,它根据参数构造一个对象,定义如下: template<class T, class ... Args> void construct(Args && ... args){ T(std::forward<Args>(args)...); } 我真的看不出这个问题。“我的问题是,这是做这件事的最佳方式吗?”做什么?您可以删除第二个重载,这将改进您的代码。我想你的误解可能就在这里:“第一次超负荷的添加带有参数的构造”。你认为第二个重载不是

我有一个函数,它根据参数构造一个对象,定义如下:

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

我真的看不出这个问题。“我的问题是,这是做这件事的最佳方式吗?”做什么?您可以删除第二个重载,这将改进您的代码。我想你的误解可能就在这里:“第一次超负荷的添加带有参数的构造”。你认为第二个重载不是“用参数构造”吗?也许你应该扩展你的问题来解释你的想法,以及为什么你添加了第二个重载
add
。第二个重载允许你这样做
add(t)
,而不是
add(t)
。啊,是的!对不起,我错过了!但是,最好也将其作为一个完美的转发单参数函数。无论如何,如果我能想出一种方法使问题的这一部分更加清晰,我可能会在几分钟内编辑这个问题想象一个用单个参数构造的类型,但它不是复制/移动构造函数。e、 g.只需将
int
(初始大小)传递给
向量
。您是否希望通过
add
功能实现这一点?您是否希望
add(5)
add(5)
分别构建两个不同的东西(
int
vector
)?我认为你需要在这样的单参数情况下指定你想要的行为类型。为什么不传递T&&T和perfect forward,而不是通过值,然后移动呢?我真的看不出这个问题。“我的问题是,这是做这件事的最佳方式吗?”做什么?您可以删除第二个重载,这将改进您的代码。我想你的误解可能就在这里:“第一次超负荷的添加带有参数的构造”。你认为第二个重载不是“用参数构造”吗?也许你应该扩展你的问题来解释你的想法,以及为什么你添加了第二个重载
add
。第二个重载允许你这样做
add(t)
,而不是
add(t)
。啊,是的!对不起,我错过了!但是,最好也将其作为一个完美的转发单参数函数。无论如何,如果我能想出一种方法使问题的这一部分更加清晰,我可能会在几分钟内编辑这个问题想象一个用单个参数构造的类型,但它不是复制/移动构造函数。e、 g.只需将
int
(初始大小)传递给
向量
。您是否希望通过
add
功能实现这一点?您是否希望
add(5)
add(5)
分别构建两个不同的东西(
int
vector
)?我认为您需要在这样的单参数情况下指定所需的行为类型。为什么不将T&&T和perfect向前传递,而不是按值传递,然后移动?
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));
}
tempalte<class T>
void add(T && t){
    construct<T>(std::forward<T>(t));
}