純粋な仮想クラスをいくつか持っています。Matrix
とVector
です。私のコードベース全体を通して、私はそれらの依存関係を作成するだけで、具体的なサブクラスは作成しません。 SimpleTransformationMatrix44
およびSimpleTranslationVector4
。これの動機は、私の代わりに第三者(適応)クラスを使用することができることです。抽象クラスで宣言されたオーバーロードされた算術演算子からポインタを返すのは妥当ですか?
私は(hereから供給)算術演算子をオーバーロードしたいと思います:
T T::operator +(const T& b) const;
T T::operator -(const T& b) const;
T T::operator *(const T& b) const;
私は彼らへの参照/ポインタの操作を実行するために有効であるように、純粋仮想クラスでそれらを宣言したいです問題は、抽象クラスを値で返すことができないということです。私は考えることができる最善の解決策は、このようなものである:(!ダウンキャストなし)
std::unique_ptr<T> T::operator +(const T& b) const;
std::unique_ptr<T> T::operator -(const T& b) const;
std::unique_ptr<T> T::operator *(const T& b) const;
これを可能にする:
std::unique_ptr<Matrix> exampleFunction(const Matrix& matrix1, const Matrix& matrix2)
{
std::unique_ptr<Matrix> product = matrix1 * matrix2;
return std::move(product);
}
ポインタが戻って以来、この場合の唯一の選択肢であると思われます値は無効で、参照を返すのは単なる愚かです。
私の質問は次のようなものです:このアイデアでプロットを外したことはありますか?あなたが作業していたいくつかのコードでそれを見たなら、あなたは自分自身にWTFを考えているでしょうか?これを達成するより良い方法はありますか?
遅刻して申し訳ありませんが、私はこれをしばらく思っていました。あなたが述べた理由のためにテンプレートの 'operator +()'(DeadMGが言っていたことはわかりませんでした)が好きです。私は、演算子の代わりに通常のメソッドを使用して、オーバーロードの規則を破らないようにすると思います。ありがとう! –