2017-06-20 8 views
1

クラスまたはプロトコルの代わりに汎用クラス定義で値を使用する方法が見つかりませんでした。達成するために、よりエレガントな方法は何ですかスウィフトは汎用として値を使用します

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 

:より一般的なMatrix<a, b>を定義してからのようなものを行うことができるようによりよいと思いながら、例えば私たちはしばしばSCNMatrix3SCNMatrix4のような行列クラスの数を見つけます上記?

+0

[[カーディナリティタイプの安全性を備えた汎用ベクター](https://stackoverflow.com/questions/34342417/generic-vector-with-cardinality-type-safety)を比較してください。 –

答えて

2

スウィフトは現在、ジェネリックスとして値をサポートしていません。

一般値パラメータは、generics manifestoに「多分」と表示されます。

コードジェネレータ(AppleがSwift Standard Libraryに使用するgybなど)を使用して、異なるサイズの行列構造を生成することができます。

関連する問題