例如:
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);
有无什么方法可以简化这一大串?
宣言の数を減らしたい場合は、コードを単純化することは不可能に思える方法があります。宣言のアイデアに従って、
&&,&&
と&&,&
は&,&&
に作業を委任できます。こうすることでコードは複雑にならず、重複もありません。ここでは少なくとも 2 つの実装が必要です。1 つはデータを移動し、もう 1 つはデータを移動しません。モバイルデータは左側と右側に分かれています。同時にADLも考慮する必要があります。これを実装するには、少なくとも 3 つのオーバーロードを宣言する必要があります。テンプレートを使用すると、宣言を 2 つに減らすことができます:
リーリー追記: C++17 以降では、constexpr if を使用して静的分岐を実装できます。通常、C++17 より前のコンパイラーでは、このような最適化を完了できます。
テストコード:
リーリーリーリー
完了です。 。 。
const & すべての参照 (左辺値、右辺値、定数左辺値、定数右辺値) と一致します。