基本レベルで構造体およびクラス(およびプロトコル)がどのように機能するかを理解しています。私はかなり一般的な状況があります:サブクラスa構造体または類似体
私は割り当て時に実際にコピーする必要がある演算子を持つ汎用値型を持つ必要があります。 これらの型は複雑な構造を持ち、サブクラス化することで特殊化することができれば、どこにでもコピーされたコードがあり、プログラミングが貧弱になります。
私はプロトコルと拡張を試しましたが、プロトコルが一般的ではなかったため、私が望む(汎用の)演算子を定義できませんでした。 私がクラスを使用する場合、私は割り当て時にコピーしません。
今日の例では、特定の正方行列関数を使用してMatrixとSquareMatrixを使用しています。演算子があり、行列には自分のリングプロトコルに準拠したものを入れることができます。私は、関連するタイプと拡張機能を持つプロトコルのほとんどすべての機能を定義しようとしました。
編集:私は本当に何をコーディングすべきかと思っています。行列の状況では、他のものと同じように正方行列を渡すことができる必要があるので、サブクラス化は唯一の選択肢ですか?たぶん私は間違っています。主な問題は、内部の値について話す関数を書く必要があるときに、有用な何かをするためにジェネリック型の引数を知っていなければならないことです。たとえば、追加を定義するときには、新しい行列を作成してジェネリック型を宣言する必要がありますが、何かが(非永続的な)プロトコルであることを知るときにはどこから取得するのですか?それは実際の型は汎用ですが、タイプ、私はそれを得る方法がありません。
解決策 alexander momchliovに感謝します。コードをプロトコルエクステンションに完全に移動させ、すべての関連タイプに「Self」を使用するためには、本質的により多くの作業が必要でした。拡張では、コンパイラはジェネリック型が何であったかに満足していました。
コードは非公開です。申し訳ありませんが、この質問には貼り付けできませんでした。あなたの忍耐と助けに感謝します。
あなたが試したことと実際の問題点は何ですか? – shallowThought