我具有以下形式的功能
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对象。
我该怎么做?
答案 0 :(得分:1)
Eigen::DenseBase<>
是抽象基类,不能创建任何此类类型的对象。您正在寻找的是:
typename Derived::PlainObject x(nr-1, nc);