我想扩展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();
}
答案 0 :(得分:2)
MatrixBase
是一个抽象类。您需要返回具有适当标量类型和大小的Matrix<>
对象。您可以直接使用typedef PlainObject
:
PlainObject sort(bool ascending = true) const {
PlainObject res = derived();
...
return res;
}