struct Matrix(int row, int col){ /* ... */ }
// finds the inverse using Gauss–Jordan elimination
pure M inverse(M)(const ref M m){ /* ... */ }
Powodem m
jest ref
ze względu na wydajność. Oczywiście nie chcę, aby kopie dużych matryc były kopiowane za każdym razem, gdy odwrotność jest potrzebna, a to działało jak dotąd dobrze.Jak używać "ref" w czasie kompilacji?
Ale to stało się problemem w sytuacji, w której odwrotność jest potrzebne w czasie kompilacji:
mixin template A(){
alias Matrix!(3, 3) Matrix3x3;
static Matrix3x3 computeSomeMatrix(){ }
immutable Matrix3x3 _m = computeSomeMatrix();
immutable Matrix3x3 _m_1 = inverse(computeSomeMatrix()); // error
}
naprawić błąd, muszę zmienić m
do non-ref, ale to oznacza, że matryce zostanie skopiowany za każdym razem, gdy wywoływana jest nazwa inverse()
. Co ja robię?
Lub po prostu mają zarówno ref i non-ref 'inverse()' warianty? – DejanLekic
Jaki jest dokładny błąd, który otrzymujesz? 'ref' powinno działać w czasie kompilacji, prawdopodobnie coś innego, co robisz, powoduje to. – Robert
Czy próbowałeś 'auto ref'? –