我爲數學對象編寫了一個抽象類,並定義了所有的運算符。而使用它,我碰到:定義一個適當的減法運算符
Fixed f1 = 5.0f - f3;
我只有兩個減法運算符定義:
inline const Fixed operator -() const;
inline const Fixed operator - (float f) const;
我得到什麼是錯在這裏 - 除了可交換(1 + 2 == 2 + 1)而減法不是(同樣適用於乘法和除法)。 我馬上寫了一個函數外我的課是這樣的:
static inline const Fixed operator - (float f, const Fixed &fp);
但後來我意識到不能這樣做,因爲這樣做,我會觸摸類的士兵,這將導致使用關鍵字friend
我不願意,並且用'靜態'不必要的函數來污染命名空間。
移動函數的類定義收率內側GCC-4.3這樣的錯誤:
error: ‘static const Fixed Fixed::operator-(float, const Fixed&)’ must be either a non-static member function or a non-member function
否則如GCC建議,並使其成爲一個非靜態函數導致以下錯誤:
error: ‘const Fixed Fixed::operator-(float, const Fixed&)’ must take either zero or one argument
爲什麼我不能在類定義中定義相同的運算符?如果沒有辦法做到這一點,是否還有其他不使用friend
關鍵字?
同樣的問題適用於部門,因爲它遭受同樣的問題。
2會不會真的做的工作 - 它可以讓你做到「固定(0.5F) - F3」,但隱式轉換不會發生在作爲成員函數實現的運算符的lhs中。實際上,「這個」始終是來電者提供的,而不是一些暫時的。 – 2009-06-27 09:49:50