例如:
mat33 operator +(mat33& m1, mat33& m2);
mat33 operator -(mat33& m1, mat33& m2);
mat33 operator +(mat33&& m1, mat33&& m2);
mat33 operator -(mat33&& m1, mat33&& m2);
mat33 operator +(mat33&& m1, mat33& m2);
mat33 operator -(mat33&& m1, mat33& m2);
mat33 operator +(mat33& m1, mat33&& m2);
mat33 operator -(mat33& m1, mat33&& m2);
有无什么方法可以简化这一大串?
如果你想要減少聲明的次數,那是有辦法的,簡化程式碼似乎不可能。依照你的聲明思路,
&&,&&
和&&,&
可以將工作代理給&,&&
。這樣程式碼不複雜,也沒有重複。這裡至少需要兩個實現,其中一個移動數據,另一個不移動數據。移動資料分lhs和rhs。同時也要兼顧ADL。實現這些至少需要聲明三個重載。用模板可以將聲明減少到兩個:
PS: c++17後可以用constexpr if實作靜態分枝。 c++17之前編譯器也通常可以完成這樣的最佳化。
測試程式碼:
不就搞定了。 。 。
const & 能符合所有引用(左值、右值、常數左值、常數右值)。