Eigen :: DenseBase не имеет члена данных - PullRequest
0 голосов
/ 09 ноября 2018

Почему Eigen::DenseBase<Derived> не имеет data() метода?

Я думал, что плотный массив будет непрерывным в памяти.

Являются ли блоки также DenseBase?

template <typename Derived>
void f(Eigen::DenseBase<Derived>& x) {
    std::sort(x.data(), x.data() + x.size());
}

ArrayBase также не имеет метода данных.

Работа вокруг:

template <typename Derived>
void f(Eigen::DenseBase<Derived>& x) {
    std::sort(&x[0], &x[0] + x.size());  // sort the whole vector
}

1 Ответ

0 голосов
/ 09 ноября 2018

DenseBase - это базовый класс для любых плотных выражений, включая A+B, A*B и т. Д. Если все, что вам нужно, это вызвать std::sort, затем перейдите к голове Эйгена и напишите:

std::sort(x.begin(), x.end());

Если выражение, которое вы передали f, имеет член .data(), вы все равно можете достичь его следующим образом: x.derived().data().

...