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
}
要修正这个错误,我需要改变m
到非裁判,但是这意味着矩阵将在每次调用inverse()
时被复制。我该怎么办?
或者只是简单地同时具有ref和non-ref'inverse()'变体? – DejanLekic 2012-01-31 16:54:36
你得到了什么确切的错误? 'ref'应该在编译时工作,这可能是你正在做的其他事情导致它。 – Robert 2012-01-31 17:20:37
你尝试过'自动参考'吗? – 2012-01-31 17:23:44