5

我想构建一个包含类型对象的泛型类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 似乎并不支持这一点。

4

1 回答 1

3

我认为您能做的最好的事情就是假设元素具有这些方法并使类型参数不受限制。这将消除警告,尽管当您希望类型系统帮助您时可能有点不满意。

联合类型会有所帮助,所以这是你可以加注的错误:http: //dartbug.com/4938

于 2013-08-31T18:47:46.167 回答