2016-10-24 2 views
0

Я хотел бы расширить библиотеку C++ Eigen, чтобы включить команду v.sort(); Я использую подход, основанный на EIGEN_MATRIXBASE_PLUGIN, изложенный в here.Расширение собственной библиотеки для включения сортировки

Код ниже (в моем «MatrixBaseAddons.h») не работает, поскольку объект «результат» не загружается с копией «this» --- в отладчике «result.rows() "- это неинициализированное значение, не равное производному() -> rows(). Как я могу сделать копию «этого» и поместить ее в «результат»?

// DOES NOT WORK 
MatrixBase<Derived> sort(bool ascending = true) const { 
    MatrixBase<Derived> result = derived(); 
    result.sortInPlace(ascending); 
    return result; 
} 

// WORKS! 
void sortInPlace(bool ascending = true) { 
    std::sort(derived().data(), derived().data() + derived().size()); 
    if (!ascending) 
     this->reverseInPlace(); 
} 

ответ

2

MatrixBase - это абстрактный класс. Вам необходимо вернуть объект Matrix<> с соответствующими скалярными типами и размерами. Вы можете напрямую использовать typedef PlainObject для этого:

PlainObject sort(bool ascending = true) const { 
    PlainObject res = derived(); 
    ... 
    return res; 
} 
Смежные вопросы