我只是想知道,如果我們可以給兩個或多個參數來操作的重載< <C++重載<<操作多個參數
個例將更加明確:
anyType operator<<(arg p1, arg p2)
{
DoSomethingWith(p1);
DoSomethingWith(p2);
return (*this);
}
而且使用它是這樣的:
anyVar << anyVar2, anyVar3;
感謝
我只是想知道,如果我們可以給兩個或多個參數來操作的重載< <C++重載<<操作多個參數
個例將更加明確:
anyType operator<<(arg p1, arg p2)
{
DoSomethingWith(p1);
DoSomethingWith(p2);
return (*this);
}
而且使用它是這樣的:
anyVar << anyVar2, anyVar3;
感謝
不,那是不可能的。
你可以來會是這樣的最接近:
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
。我真的懷疑,除了學習經驗之外,是否值得這樣做。
類似於該風格的東西通常用於「構建器」模式,但使用成員函數而不是顯式運算符。這很有用,因爲您可以安排有效地使配置參數與順序無關。
謝謝!我想我會用std :: pair來做,這有點棘手,但對我來說看起來不錯 – taof 2014-12-13 15:10:43
我認爲在這一點上,可能明智地問*爲什麼*你認爲'<<'運算符是函數的正確選擇爲此行爲過載。非標準的操作符重載是非常難以維護和調試的。 – 2014-12-13 15:47:21
不,你不能這樣做。一個二元運算符只能被重載以獲得兩個操作數,既可以作爲具有一個參數的成員函數,也可以(除了賦值運算符)具有兩個操作數的非成員。
如果你想要一些更像功能的東西,寫一個函數。
或者,你可以寫你的運營商允許鏈接,就像對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.
好的,謝謝你!但我沒有給出一個好的解釋,我想用p1和p2做不同的事情,所以我不能那樣做。 我會像Rici說的,用std :: pair或者像你說的那樣簡單地用一個函數 – taof 2014-12-13 15:09:54
注意:您的例子是使用兩個運營商(運營商<<和operator,(逗號)) – 2014-12-13 15:02:17