implicit conversion to scalar for inner product

This commit is contained in:
Gael Guennebaud 2010-06-02 09:45:57 +02:00
parent 314bfa1375
commit 4ebb80490a
5 changed files with 24 additions and 14 deletions

View File

@ -182,6 +182,11 @@ class GeneralProduct<Lhs, Rhs, InnerProduct>
} }
typename Base::Scalar value() const { return Base::coeff(0,0); } typename Base::Scalar value() const { return Base::coeff(0,0); }
/** Convertion to scalar */
operator const typename Base::Scalar() const {
return Base::coeff(0,0);
}
}; };
/*********************************************************************** /***********************************************************************

View File

@ -72,7 +72,8 @@ template<typename MatrixType> void product(const MatrixType& m)
Scalar s1 = ei_random<Scalar>(); Scalar s1 = ei_random<Scalar>();
int r = ei_random<int>(0, rows-1), int r = ei_random<int>(0, rows-1),
c = ei_random<int>(0, cols-1); c = ei_random<int>(0, cols-1),
c2 = ei_random<int>(0, cols-1);
// begin testing Product.h: only associativity for now // begin testing Product.h: only associativity for now
// (we use Transpose.h but this doesn't count as a test for it) // (we use Transpose.h but this doesn't count as a test for it)
@ -150,4 +151,8 @@ template<typename MatrixType> void product(const MatrixType& m)
{ {
VERIFY(areNotApprox(res2,square2 + m2.transpose() * m1)); VERIFY(areNotApprox(res2,square2 + m2.transpose() * m1));
} }
// inner product
Scalar x = square2.row(c) * square2.col(c2);
VERIFY_IS_APPROX(x, square2.row(c).transpose().cwiseProduct(square2.col(c2)).sum());
} }