我正在構建一個稍微不對稱的類。在投訴進入之前,它必然是不對稱的。有一個轉換(需要一點時間的操作),當兩個對象加在一起時必須發生,並且轉換最自然地發生在正確的加法器上。是否有可能在C++中重載運算符關聯性?
爲了使這個具體的,這裏發生了什麼事的一般示例...
class Foo {
char _fav;
int _prop;
public:
const char fav() const {return _fav;}
const int prop() const (return _prop;}
void changeFav(char); // complicated method that also changes _prop
void changeProp(int); // straightforward method
}
Foo
operator + (Foo A, Foo B) {
Foo sum;
if (A.fav() != B.fav()) A.changeFav(B.fav);
sum.changeProp(A.prop() + B.prop());
return sum;
}
爲了兩個Foo
s到加入,他們需要有相同的_fav
,所以選擇一定要作出哪些轉換。根據Foo
的詳細信息,將左加數更改爲匹配正確的加數是很自然的。
但是,這樣做的時候:
Foo A,B,C;
Foo D = A + B + C; // D = (A + B) + C
Foo E = A + (B + C);
如果A
已經有相同的_fav
爲C
,然後changeFav
爲D
調用兩次(一次更改A._fav
到B._fav
然後再次改變(A+B)._fav
到C._fav
)和一次用於E
(將B._fav
更改爲C._fav
)。我更喜歡後者,但希望避免強制用戶使用括號來添加多個內容。
有沒有辦法超載operator +
的關聯性,使這種情況發生?
你的'operator +'不返回任何東西,並且兩個成員函數都缺少返回類型。 –
不能提供完整的答案,但總而言之,不要返回foo,而是要使foo以外的其他操作數成爲正確的操作數。這只是我自己輸入的意識流。 –
@LightnessRacesinOrbit是的,因爲這只是一個虛擬的例子,所以你可以看到發生了什麼。這不是真正的代碼。 – PengOne