remove operator *= between matrices: too much hassle.

This commit is contained in:
Benoit Jacob 2007-09-07 09:47:13 +00:00
parent 61158b1922
commit 506cc5db12
4 changed files with 4 additions and 35 deletions

View File

@ -49,12 +49,5 @@ int main(int, char **)
m = m_save; m = m_save;
m.alias() = m * m; m.alias() = m * m;
cout << "And m is now:" << endl << m << endl << "as was expected." << endl; cout << "And m is now:" << endl << m << endl << "as was expected." << endl;
cout << "To make your life easier, operator*= between matrices automatically" << endl
<< "creates an alias. So a *= b is equivalent to a.alias() *= b," << endl
<< "when a and b are matrices. So, coming back to the original matrix m," << endl
<< "if we do m *= m, the matrix m becomes:" << endl;
m = m_save;
m *= m;
cout << m << endl << "as expected." << endl;
return 0; return 0;
} }

View File

@ -206,14 +206,10 @@ class MatrixBase
MatrixBase& operator+=(const MatrixConstXpr<Content> &xpr); MatrixBase& operator+=(const MatrixConstXpr<Content> &xpr);
template<typename Content> template<typename Content>
MatrixBase& operator-=(const MatrixConstXpr<Content> &xpr); MatrixBase& operator-=(const MatrixConstXpr<Content> &xpr);
template<typename Content>
MatrixBase& operator*=(const MatrixConstXpr<Content> &xpr);
template<typename Derived2> template<typename Derived2>
MatrixBase& operator+=(const MatrixBase<Derived2> &other); MatrixBase& operator+=(const MatrixBase<Derived2> &other);
template<typename Derived2> template<typename Derived2>
MatrixBase& operator-=(const MatrixBase<Derived2> &other); MatrixBase& operator-=(const MatrixBase<Derived2> &other);
template<typename Derived2>
MatrixBase& operator*=(const MatrixBase<Derived2> &other);
protected: protected:
@ -269,12 +265,12 @@ template<typename Derived> class MatrixAlias
typedef MatrixRef<MatrixAlias<Derived> > Ref; typedef MatrixRef<MatrixAlias<Derived> > Ref;
typedef MatrixXpr<Ref> Xpr; typedef MatrixXpr<Ref> Xpr;
MatrixAlias(Derived& matrix) : m_ref(matrix), m_tmp(matrix) {} MatrixAlias(Derived& matrix) : m_aliased(matrix), m_tmp(matrix) {}
MatrixAlias(const MatrixAlias& other) : m_ref(other.m_ref), m_tmp(other.m_tmp) {} MatrixAlias(const MatrixAlias& other) : m_aliased(other.m_aliased), m_tmp(other.m_tmp) {}
~MatrixAlias() ~MatrixAlias()
{ {
m_ref.xpr() = m_tmp; m_aliased.xpr() = m_tmp;
} }
Xpr xpr() Xpr xpr()
@ -324,7 +320,7 @@ template<typename Derived> class MatrixAlias
} }
protected: protected:
MatrixRef<MatrixBase<Derived> > m_ref; MatrixRef<MatrixBase<Derived> > m_aliased;
Derived m_tmp; Derived m_tmp;
}; };

View File

@ -213,24 +213,6 @@ EIGEN_MAKE_MATRIX_OP_EQ(-)
#undef EIGEN_MAKE_MATRIX_OP_EQ #undef EIGEN_MAKE_MATRIX_OP_EQ
template<typename Derived1>
template<typename Derived2>
MatrixBase<Derived1> &
MatrixBase<Derived1>::operator *=(const MatrixBase<Derived2> &mat2)
{
alias() = *this * mat2;
return *this;
}
template<typename Derived>
template<typename Content>
MatrixBase<Derived> &
MatrixBase<Derived>::operator *=(const MatrixConstXpr<Content> &xpr)
{
alias() = *this * xpr;
return *this;
}
} // namespace Eigen } // namespace Eigen
#endif // EIGEN_MATRIXOPS_H #endif // EIGEN_MATRIXOPS_H

View File

@ -123,8 +123,6 @@ template<typename Content> class MatrixXpr
MatrixXpr& operator+=(const MatrixBase<Derived> &matrix); MatrixXpr& operator+=(const MatrixBase<Derived> &matrix);
template<typename Derived> template<typename Derived>
MatrixXpr& operator-=(const MatrixBase<Derived> &matrix); MatrixXpr& operator-=(const MatrixBase<Derived> &matrix);
private: private:
void operator=(const MatrixXpr &other) void operator=(const MatrixXpr &other)