我只想知道我们是否可以为运算符的重载提供两个或更多参数<<
一个例子将更明确:
anyType operator<<(arg p1, arg p2)
{
DoSomethingWith(p1);
DoSomethingWith(p2);
return (*this);
}
并像这样使用它:
anyVar << anyVar2, anyVar3;
答案 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.