C++ 使用运算符+;=具有多个值

C++ 使用运算符+;=具有多个值,c++,vector,operator-overloading,parameter-passing,parameter-pack,C++,Vector,Operator Overloading,Parameter Passing,Parameter Pack,我希望创建一个运算符+=的模板,它将向向量添加值。我一直在修补参数包,但它对我不起作用(我想我作为C++的新手做了些错事)。基本上,我希望通过如下代码实现添加到向量末尾的效果: std::vector<int> v; v += 3, 4, 5, 6; std::vector v; v+=3,4,5,6; 如您所见,我想通过操作符覆盖向向量添加多个值。这是我现在掌握的代码: template<typename T, typename... Ts> void operat

我希望创建一个运算符+=的模板,它将向向量添加值。我一直在修补参数包,但它对我不起作用(我想我作为C++的新手做了些错事)。基本上,我希望通过如下代码实现添加到向量末尾的效果:

std::vector<int> v;
v += 3, 4, 5, 6;
std::vector v;
v+=3,4,5,6;
如您所见,我想通过操作符覆盖向向量添加多个值。这是我现在掌握的代码:

template<typename T, typename... Ts>
void operator+=(std::vector<T> v1, Ts const &... ts) {

   v1.push_back(ts);

}
模板
void运算符+=(标准::向量v1,Ts常量和…Ts){
v1.推回(ts);
}
但我收到一个错误,该表达式包含意外的参数包。如果不是参数包,那么如何通过重写运算符将这些值添加到向量中


提前感谢

重载
+=
不足以从字面上启用该语法:

std::vector<int> v;
v += 1,2,3,4;
输出:

1 2 3 4 
如果没有自定义的
操作符,
则输出为
1
,因为需要使用另一种写入上述行的方法

v.operator+=(1),2,3,4;
hacky_向量
可以工作,但在C++11之前是“ok”的。当没有初始值设定项列表和列表初始化时,通常需要一种更好的方法来初始化类似向量的对象,一些库发明了类似上面的东西。如今,这样的黑客不应该再使用了。用C++已经拥有的东西。< /P> 初始化:

std::vector<int> v{1,2,3,4,5};

重载
+=
不足以从字面上启用该语法:

std::vector<int> v;
v += 1,2,3,4;
输出:

1 2 3 4 
如果没有自定义的
操作符,
则输出为
1
,因为需要使用另一种写入上述行的方法

v.operator+=(1),2,3,4;
hacky_向量
可以工作,但在C++11之前是“ok”的。当没有初始值设定项列表和列表初始化时,通常需要一种更好的方法来初始化类似向量的对象,一些库发明了类似上面的东西。如今,这样的黑客不应该再使用了。用C++已经拥有的东西。< /P> 初始化:

std::vector<int> v{1,2,3,4,5};

do to
v+=3,4,5,6
类似于do
(v+=3)、4、5、6然后
v+=33,4,5,6
不是一个元组,为什么不使用已经存在的成员函数呢<代码>v.insert(v.end(),{3,4,5,6})
您需要重载
运算符才能获得准确的语法。这是一个非常奇怪的黑客,在初始化列表出现之前可以使用,现在看起来有点奇怪了outdated@Insekure在不涉及程序定义类型的标准容器中添加运算符重载通常弊大于利,所以我希望这样做是一种教育性练习。在真实代码中看到这一点的人必须立即搜索运算符重载,以了解其真正含义。@TEDLYNGO是的,这是一个教育性练习,但由于您和其他人在这篇文章中的帮助,我终于了解了模板和重写运算符的含义。我非常感激。非常感谢大家
v+=3,4,5,6
类似于do
(v+=3)、4、5、6然后
v+=33,4,5,6
不是一个元组,为什么不使用已经存在的成员函数呢<代码>v.insert(v.end(),{3,4,5,6})
您需要重载
运算符才能获得准确的语法。这是一个非常奇怪的黑客,在初始化列表出现之前可以使用,现在看起来有点奇怪了outdated@Insekure在不涉及程序定义类型的标准容器中添加运算符重载通常弊大于利,所以我希望这样做是一种教育性练习。在真实代码中看到这一点的人必须立即搜索运算符重载,以了解其真正含义。@TEDLYNGO是的,这是一个教育性练习,但由于您和其他人在这篇文章中的帮助,我终于了解了模板和重写运算符的含义。我非常感激。非常感谢大家