2017-06-20 64 views
1

我找不到在泛型類定義中使用值而不是類或協議的方法。比如我們經常會發現一些矩陣類像SCNMatrix3SCNMatrix4,而這將會是更好的,能夠定義一個更通用的Matrix<a, b>,然後做這樣的事情:迅速使用值作爲通用

struct Mat<a is Int, b is Int> { 
    static func * (left: Mat<i, j>, right: Mat<k, l>) -> Mat<i, l> where j == k { 
    return ... 
    } 
} 

let m = Matrix<4, 5>(...) 
let n = Matrix<5, 3>(...) 
let p = Matrix<2, 2>(...) 
let x = m * n 
let y = m * p // compiler error since size mismatch 

什麼是更優雅的方式來實現以上?

+0

比較[通用向量與基數型安全](https://stackoverflow.com/questions/34342417/generic-vector-with-cardinality-type-safety)。 –

回答

2

Swift目前不支持作爲泛型的值。

通用值參數在generics manifesto中被列爲「Maybe」。

您可以使用代碼生成器(如Apple用於Swift標準庫的gyb)來生成不同大小的矩陣結構。