本征模板函数和维度

Eigen Templated Function and Dimensions

我有一个表单函数

template <typename derived>
void foo(Eigen::DenseBase<Derived>& z){
  nc = z.cols();
  nr = z.rows();
  Eigen::DenseBase<Derived> x(nr-1, nc);
}

我想要一个有点像上面的伪代码的函数。本质上,我想传递一个对象 z,它可以是 VectorXd 或 MatrixXd 对象,如果它是 MatrixXd 对象,那么我想将 x 定义为维度 (nr-1) x nc 的 MatrixXd。但是,如果 z 是 VectorXd 对象,我想将 x 定义为长度为 (nr-1) 的 VectorXd 对象。

我该怎么做?

Eigen::DenseBase<> 是一个抽象基础 class,您不能创建任何此类类型的对象。您正在寻找的是:

typename Derived::PlainObject x(nr-1, nc);