Я хочу, чтобы class Test
имел Eigen :: Matrix, который сопоставляется с Test :: _ a. Это означает, что всякий раз, когда я изменяю std :: vector, Eigen :: Matrix также сразу отражает изменение, поскольку и вектор, и матрица используют один и тот же кусок памяти для хранения данных.Имейте класс с атрибутом Eigen :: matrix, который сопоставляется с атрибутом std :: vector
Это работает:
#include <Eigen/Dense>
#include <vector>
int main() {
std::vector<int> a;
a.resize(10);
typedef Eigen::Matrix<int, 1, Eigen::Dynamic> mat_type;
Eigen::Map<mat_type> a_eigen(a.data(), a.size());
}
Но это не работает ....
#include <Eigen/Dense>
#include <vector>
class Test {
public:
Test(int size) {
_a.resize(size);
_a_eigen(_a.data(), size);
}
std::vector<int> _a;
Eigen::Map< Eigen::Matrix<int, 1, Eigen::Dynamic> > _a_eigen;
};
int main() {
Test t(10);
}
Ниже также не работает, потому что COUT печатает ничего
#include <Eigen/Dense>
#include <vector>
#include <iostream>
class Test {
public:
typedef Eigen::Matrix<int, 1, Eigen::Dynamic> mat_type;
Test(int size) {
_a.resize(size);
Eigen::Map<mat_type>(_a_eigen) = Eigen::Map<mat_type>(_a.data(), size);
for (int i = 0; i < size; ++i) _a[i] = i;
}
std::vector<int> _a;
mat_type _a_eigen;
};
int main() {
Test t(10);
std::cout << t._a_eigen;
}
выглядит так, как будто я получил нисходящее направление. –