タイプ のオブジェクトを含むジェネリック クラスを構築したいと考えていますT
。包含クラスは、これらのオブジェクトに対していくつかの演算子、具体的+
には 、-
、などの演算子を実行する必要が*
あり/
ます。オブジェクトの型がこれらの演算子を実装していることを確認するにはどうすればよいですか?
具体的には、数学的行列のように、行列クラスを実装しています。要素のみを許可double
することもできましたが、有理数や複素数などのカスタム数値クラスの行列も作成できるようにしたいと考えています (これはより大きなプロジェクトの一部です)。
私の現在の実装には署名があります
class Matrix<T extends MatrixElement> {
final int _rows; // The number of rows
final int _cols; // The number of columns
...
final List<T> _elements; // Matrix data, [i*step+j] is row i, col j.
MatrixElement
次のような演算子を持つ抽象クラスはどこですか
dynamic operator + (dynamic other);
Matrix クラスを単にclass Matrix<T> { ... }
に変更することもできましたが、実行時にエラーが発生する可能性があり、Dart エディターはクラスに対して定義されていない演算子に関する警告でいっぱいになりますObject
。
私の直感は のようなものですclass Matrix<T implements MatrixElement> { ... }
が、Dart はこれをサポートしていないようです。