+= 在没有 boost 的向量上
有没有办法在不使用 boost 或使用派生类的情况下将 += 运算符与向量一起使用?
例如。
somevector += 1, 2, 3, 4, 5, 6, 7;
实际上会是
somevector.push_back(1);
somevector.push_back(2);
somevector.push_back(3);
etc.
Is there any way to use the += operator with a vector without using boost or using a derivated class?
Eg.
somevector += 1, 2, 3, 4, 5, 6, 7;
would actually be
somevector.push_back(1);
somevector.push_back(2);
somevector.push_back(3);
etc.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
通过一些丑陋的运算符重载,这并不是太难实现。这个解决方案可以很容易地变得更加通用,但它应该作为一个足够的例子。
您所需的语法使用两个运算符:
+=
运算符和,
运算符。首先,我们需要创建一个包装类,它允许我们应用,
运算符将元素推送到向量的后面:然后,为了将其与
+= 结合使用
在向量上,我们重载向量的+=
运算符。我们返回一个push_back_wrapper
实例,以便我们可以使用逗号运算符链接推回:现在我们可以编写示例中的代码:
v += 1
将调用我们的operator+=
重载,它将返回push_back_wrapper
的实例。然后将逗号运算符应用于“列表”中的每个后续元素。With a little ugly operator overloading, this isn't too difficult to accomplish. This solution could easily be made more generic, but it should serve as an adequate example.
Your desired syntax uses two operators: the
+=
operator and the,
operator. First, we need to create a wrapper class that allows us to apply the,
operator to push an element onto the back of a vector:Then, in order to use this in conjunction with
+=
on a vector, we overload the+=
operator for a vector. We return apush_back_wrapper
instance so that we can chain push backs with the comma operator:Now we can write the code you have in your example:
The
v += 1
will call ouroperator+=
overload, which will return an instance of thepush_back_wrapper
. The comma operator is then applied for each of the subsequent elements in the "list."不是这样的语法,不。但你可以这样做:
Not with syntax like that, no. But you could do something like this: