|
|
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 |
|
|
|
|
|
*/ |
|
|
|
|
|
} |
|
|
|