Я работаю над проектом, в котором мне нужно объединить два 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;
}
Любые идеи о том, как достичь такой реализации, были бы очень признательны!