Реализовать оператор const и non-const coeffs () для конкатенации Eigen :: Vectors? - PullRequest
0 голосов
/ 17 июня 2020

Я работаю над проектом, в котором мне нужно объединить два Eigen-типа и "mimi c" их, чтобы они вели себя как один единственный Eigen тип. В частности, требуется наличие класса, содержащего два различных собственных вектора в качестве переменных-членов, как показано ниже. Загвоздка в том, что при передаче алгоритму этот класс должен вести себя как отдельный Eigen-объект, а это означает, что мне нужно имитировать c некоторые из Eigens API. Из-за требований к памяти это не решение просто скопировать два собственных вектора в более крупный собственный тип и вместо этого работать с ним.

Для многих методов собственных матриц этот комбинированный класс легко реализуем, но я мне не хватает решения о том, как реализовать константные и неконстантные геттеры для отдельных коэффициентов, возвращаемых по ссылке.

В конце концов, я бы хотел, чтобы было осуществимо следующее:

class Combined{
public:
 Combined(const Eigen::Vector3d a, const Eigen::Vector3d b): vec1_(a), vec2_(b){}

 const Eigen::Vector6d& coeffs() const {
    // how to implement this?
 }

 Eigen::Vector6d& coeffs() {
    // how to implement this?
 }

 // some other member functions not related to Eigen...
 // ...

private:
  Eigen::Vector3d vec1_;
  Eigen::Vector3d vec2_;
};


int main(){

 Eigen::Vector3d a = Eigen::Vector3d::Random();
 Eigen::Vector3d b = Eigen::Vector3d::Random();

 Combined t (a, b);

 // the const getters should exist:
 Eigen::Vector6d r;
 r= t.coeffs();

 // the non-const getters should allow modification:
 t.coeffs()(0) = 0; // assign some value.


 return 0;
}

Любые идеи о том, как достичь такой реализации, были бы очень признательны!

...