|
|
|
|
namespace Eigen {
|
|
|
|
|
|
|
|
|
|
/** \page TopicCustomizing_InheritingMatrix Inheriting from Matrix
|
|
|
|
|
|
|
|
|
|
Before inheriting from Matrix, be really, I mean REALLY, sure that using
|
|
|
|
|
EIGEN_MATRIX_PLUGIN is not what you really want (see previous section).
|
|
|
|
|
If you just need to add few members to Matrix, this is the way to go.
|
|
|
|
|
|
|
|
|
|
An example of when you actually need to inherit Matrix, is when you
|
|
|
|
|
have several layers of heritage such as
|
|
|
|
|
MyVerySpecificVector1, MyVerySpecificVector2 -> MyVector1 -> Matrix and
|
|
|
|
|
MyVerySpecificVector3, MyVerySpecificVector4 -> MyVector2 -> Matrix.
|
|
|
|
|
|
|
|
|
|
In order for your object to work within the %Eigen framework, you need to
|
|
|
|
|
define a few members in your inherited class.
|
|
|
|
|
|
|
|
|
|
Here is a minimalistic example:
|
|
|
|
|
|
|
|
|
|
\include CustomizingEigen_Inheritance.cpp
|
|
|
|
|
|
|
|
|
|
Output: \verbinclude CustomizingEigen_Inheritance.out
|
|
|
|
|
|
|
|
|
|
This is the kind of error you can get if you don't provide those methods
|
|
|
|
|
\verbatim
|
|
|
|
|
error: no match for ‘operator=’ in ‘v = Eigen::operator*(
|
|
|
|
|
const Eigen::MatrixBase<Eigen::Matrix<double, -0x000000001, 1, 0, -0x000000001, 1> >::Scalar&,
|
|
|
|
|
const Eigen::MatrixBase<Eigen::Matrix<double, -0x000000001, 1> >::StorageBaseType&)
|
|
|
|
|
(((const Eigen::MatrixBase<Eigen::Matrix<double, -0x000000001, 1> >::StorageBaseType&)
|
|
|
|
|
((const Eigen::MatrixBase<Eigen::Matrix<double, -0x000000001, 1> >::StorageBaseType*)(& v))))’
|
|
|
|
|
\endverbatim
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
}
|