特征模板功能和尺寸

时间:2018-10-18 00:23:19

标签: 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对象,那么我想将x定义为尺寸为(nr-1)x nc的MatrixXd。但是,如果z是一个VectorXd对象,我想将x定义为长度为(nr-1)的VectorXd对象。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

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

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