扩展特征库以包括排序

时间:2016-10-24 17:08:53

标签: c++ eigen

我想扩展C ++ Eigen库以包含命令v.sort();我正在使用基于EIGEN_MATRIXBASE_PLUGIN的方法here

下面的代码(在我的“MatrixBaseAddons.h”中)不起作用,因为“result”对象没有在调试器中加载“this”的副本---“result.rows()”是未初始化的值,不等于derived() - > rows()。我如何实际复制“this”并将其放入“结果”?

// 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();
}

1 个答案:

答案 0 :(得分:2)

MatrixBase是一个抽象类。您需要返回具有适当标量类型和大小的Matrix<>对象。您可以直接使用typedef PlainObject

PlainObject sort(bool ascending = true) const {
  PlainObject res = derived();
  ...
  return res;
}