Spec-Zone.ru › Eigen3

Наследование от Matrix

Перед наследованием от Matrix, убедитесь, что использование EIGEN_MATRIX_PLUGIN не является более подходящим решением (см. предыдущий раздел). Если вам нужно добавить несколько членов к Matrix, это правильный способ.

Пример, когда вам действительно нужно унаследовать от Matrix, — это когда у вас несколько уровней наследования, таких как MyVerySpecificVector1, MyVerySpecificVector2 -> MyVector1 -> Matrix и MyVerySpecificVector3, MyVerySpecificVector4 -> MyVector2 -> Matrix.

Для работы вашего объекта в рамках фреймворка Eigen вам необходимо определить несколько членов в унаследованном классе.

Вот минимальный пример:

#include <Eigen/Core>
#include <iostream>
 
class MyVectorType : public Eigen::VectorXd
{
public:
    MyVectorType(void):Eigen::VectorXd() {}
 
    // This constructor allows you to construct MyVectorType from Eigen expressions
    template<typename OtherDerived>
    MyVectorType(const Eigen::MatrixBase<OtherDerived>& other)
        : Eigen::VectorXd(other)
    { }
 
    // This method allows you to assign Eigen expressions to MyVectorType
    template<typename OtherDerived>
    MyVectorType& operator=(const Eigen::MatrixBase <OtherDerived>& other)
    {
        this->Eigen::VectorXd::operator=(other);
        return *this;
    }
};
 
int main()
{
  MyVectorType v = MyVectorType::Ones(4);
  v(2) += 10;
  v = 2 * v;
  std::cout << v.transpose() << std::endl;
}

Вывод:

 2  2 22  2

Вот какой вид ошибки вы можете получить, если не предоставите эти методы

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))))’

© Eigen.
Licensed under the MPL2 License.
https://eigen.tuxfamily.org/dox/TopicCustomizing_InheritingMatrix.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API