c ++运算符重载有两个非类参数(用代理解决)

时间:2016-03-04 00:06:57

标签: c++ overloading

我正在学习重载,如果我能用两个非类参数创建一个重载运算符,我很好奇。

例如,使用x和y来调用

的向量类
var date = "4/10/2016, 4:00:00PM";
var res = date.match(/(\d+)(?=:\d+:\d+)|([A-Z]+)(?=$)/g);
document.body.textContent = res.join(" ");

谢谢!

修改

我已设法做到这一点,并且还扩展为使用与用户创建一样多的参数。这就是它的样子:

vector += (4.5, -2.1);

希望有人觉得它很有用。

3 个答案:

答案 0 :(得分:3)

这不会奏效,因为(4.5, -2.1)会调用内置的逗号运算符,只需求值为-2.1 可以这样做:

vector += 4.5, -2.1;

这是有效的,因为,的优先级低于+=。您可以重载+=,以便它返回一个代理对象,而该代理对象又有一个重载的,运算符,它将附加其他元素。

答案 1 :(得分:1)

您可以使用std::initializer_list

v & operator += (std::initializer_list<int> l)
{
    sum = std::accumulate(l.begin(), l.end(), sum);
    .....

您必须将您的电话改为

vector += {1 , 2};

答案 2 :(得分:0)

如果你有一对配对,那么

就是一个更具可读性的选择
vector += std::make_pair( 4.5, -2.1 );

看起来不那么神奇,这通常是一件好事。