ベクトルデータを操作する関数をいくつか書いています。
オブジェクトをコピー不可(プライベートコピーコンストラクターと代入演算子)に定義しました。
次に、テンプレート化された演算子を定義しました=
template <typename G>
inline const TMatrix &operator=(const G &gen) {
ir_mat::Copy<G, Dimension>::start(m_data, gen);
return *this;
}
この記事で説明されているように、「+」、「*」などのいくつかの追加の演算子。
これで、式の結果をオブジェクトに割り当てることができます。
Vector3f v1, v2, v3;
v1 = v2 + v3;
変数を宣言して1つのステートメントで割り当てることができないのはなぜですか?
Vector3f v1, v2;
Vector3f v3 = v1 + v2;
この割り当ては、変数をインスタンス化する前に一時オブジェクトを作成し、それを新しいオブジェクトにコピーしようとするためですか?一時的なストレージなしで、新しいオブジェクトをインスタンス化するためにも演算子'='を使用できますか?そのための特別なコンストラクターを定義する必要がありますか?
アップデート
また、テンプレート化されたコピーコンストラクターを定義しました(おそらく最も単純な形式で):
template <typename G>
TMatrix(const G &data) {
operator=(data);
}
これで、v3を次のようにインスタンス化することもできます。
Vector3f v3(v1 + v2);
しかし、他の割り当てではまだ運がありません:
Vector3f v3 = v1 + v2;