struct Matrix(int row, int col){ /* ... */ }
// finds the inverse using Gauss–Jordan elimination
pure M inverse(M)(const ref M m){ /* ... */ }
El motivo m
es un ref
es por rendimiento. Obviamente, no quiero que se copien matrices grandes cada vez que se necesite la inversa, y hasta ahora ha funcionado bien.¿Cómo usar 'ref' en tiempo de compilación?
embargo, se ha convertido en un problema en las situaciones donde se necesita la inversa en tiempo de compilación:
mixin template A(){
alias Matrix!(3, 3) Matrix3x3;
static Matrix3x3 computeSomeMatrix(){ }
immutable Matrix3x3 _m = computeSomeMatrix();
immutable Matrix3x3 _m_1 = inverse(computeSomeMatrix()); // error
}
Para corregir el error, necesito cambiar m
a un no-ref, pero eso significa que las matrices se copiará cada vez que se llame al inverse()
. ¿Qué debo hacer?
¿O simplemente tiene las dos variantes ref y no ref 'inverse()'? – DejanLekic
¿Cuál es el error exacto que está obteniendo? 'ref' debería funcionar en tiempo de compilación, es probable que sea otra cosa lo que estás haciendo lo que está causando. – Robert
¿Has probado 'auto ref'? –