<<有多个参数的运算符

时间:2014-12-13 14:51:01

标签: c++ parameters overloading operator-keyword

我只想知道我们是否可以为运算符的重载提供两个或更多参数<<

一个例子将更明确:

anyType         operator<<(arg p1, arg p2)
{
DoSomethingWith(p1);
DoSomethingWith(p2);
return (*this);
}

并像这样使用它:

anyVar << anyVar2, anyVar3;

2 个答案:

答案 0 :(得分:5)

不,这是不可能的。

你最接近的将是:

anyType         operator<<(std::pair<arg, arg> p)
{
  DoSomethingWith(p.first);
  DoSomethingWith(p.second);
  return (*this);
}

anyvar << std::make_pair(a1, a2);

或者,通过让anyType::operator<<(arg)返回一个只保留其参数的临时对象并实现不同的tempObject::operator<<(arg),你可以做一些更复杂的事情来有效地调用对运算符的调用。做的工作。然后,您可以将其称为anyvar << arg1 << arg2。除了学习经验之外,我真的怀疑它是否值得麻烦。

类似于该样式的东西经常在“构建器”模式中使用,但使用成员函数而不是显式运算符。这很有用,因为您可以安排有效地使配置参数与顺序无关。

答案 1 :(得分:0)

不,你不能这样做。二元运算符只能重载以获取两个操作数,可以是具有一个参数的成员函数,也可以是(赋值运算符除外)非二元运算符。

如果你想要的东西更像一个函数,写一个函数。

或者,您可以编写运算符以允许链接,就像I / O流的标准重载一样:

anyType & operator<<(arg p) {   // return a reference, not a copy
    DoSomethingWith(p);
    return *this;
}

anyvar << anyVar2 << anyVar3;  // Does the thing to each variable, in turn.