C++ 本征模板函数与维数

C++ 本征模板函数与维数,c++,eigen,C++,Eigen,我有一个函数的形式 template <typename derived> void foo(Eigen::DenseBase<Derived>& z){ nc = z.cols(); nr = z.rows(); Eigen::DenseBase<Derived> x(nr-1, nc); } 我想要一个类似于上述伪ish代码的函数。本质上,我想传递一个对象z,它可以是VectorXd或MatrixXd对象,如果它是MatrixXd对象

我有一个函数的形式

template <typename derived>
void foo(Eigen::DenseBase<Derived>& z){
  nc = z.cols();
  nr = z.rows();
  Eigen::DenseBase<Derived> x(nr-1, nc);
}
我想要一个类似于上述伪ish代码的函数。本质上,我想传递一个对象z,它可以是VectorXd或MatrixXd对象,如果它是MatrixXd对象,那么我想将x定义为nr-1 x nc尺寸的MatrixXd。但是,如果z是VectorXd对象,我想将x定义为长度为nr-1的VectorXd对象

我如何才能做到这一点?

Eigen::DenseBase是一个抽象基类,您不能创建任何此类类型的对象。您需要的是:

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

这对向量也适用吗?正如我提到的,这是关键problem@jds只要派生代码中的行数在编译时不是固定的,这就行了。