5
struct Matrix(int row, int col){ /* ... */ }
// finds the inverse using Gauss–Jordan elimination
pure M inverse(M)(const ref M m){ /* ... */ }
理由はm
がref
であることが性能のためです。明らかに、逆行列が必要になるたびに大きな行列がコピーされることは望ましくありません。これはこれまでのところうまくいきました。コンパイル時に 'ref'を使用するには?
しかし、それは逆に、コンパイル時に必要とされる状況で問題となっている:
mixin template A(){
alias Matrix!(3, 3) Matrix3x3;
static Matrix3x3 computeSomeMatrix(){ }
immutable Matrix3x3 _m = computeSomeMatrix();
immutable Matrix3x3 _m_1 = inverse(computeSomeMatrix()); // error
}
エラーを修正するには、私は非refにm
を変更する必要があるが、それはその行列を意味し、 inverse()
が呼び出されるたびにコピーされます。私は何をしますか?
または単にrefとinverse以外の 'inverse()'バリアントを持つことができますか? – DejanLekic
正確なエラーは何ですか? 'ref'はコンパイル時に動作するはずです。それはあなたがやっている何か他のものでしょう。 – Robert
'auto ref'を試しましたか? –