On 11.01.2012 07:19, Bernhard Zeisl wrote:
If we understand the tutorial correctly, foo should look like
template <typename TypeT>
void foo (const Eigen::MatrixBase<TypeT> &mat);
where a const cast needs to be used to write data back to mat.
Yes, the const_cast is indeed not very nice. The problem is that you
can't pass a temporary object (such as A.col(i)) as a non-const
reference (unless you use C++11's RValue references).
Of course this bears the problem that you can also pass a const
Matrix<...> to foo and modify it -- which actually should be prohibited.
Another problem in my opinion is that you can't easily achieve type
safety of foo, i.e. if you only want to allow Matrices of a certain
size or scalar type (but you can achieve this by static assertions).
I attached a an example, which should make more clear what we are trying
to achieve.
You need to give every matrix a different template parameter, e.g.:
template <typename Type_A, typename Type_b, typename Type_x> void
solveLeastSquares (const Eigen::MatrixBase<Type_A> &A, const
Eigen::MatrixBase<Type_b> &b, Eigen::MatrixBase<Type_x> const &x_,
LEAST_SQUARES_METHOD method = SVD)
Maybe the documentation could point that out more explicitly.
Especially in the quoted tutorial parameters x and y should get
different template arguments (in the last two examples)
HTH
Christoph