我需要编写一个以 Eigen 对象作为参数的函数:
template <typename Derived> auto myFun(const Eigen::ArrayBase<Derived>& x)
我需要返回作为参数传递的同一个对象。我需要它的原因是上面的函数是函数模板的特例,它将执行更一般的操作,但我认为这与这个问题无关。
我会写
template <typename Derived> auto myFun(const Eigen::ArrayBase<Derived>& x){
return x;
}
但是如果我跑
Eigen::Array<double,5,1> sol;
myFun(sol);
我得到以下错误
调用类'Eigen::ArrayBase
我不明白发生了什么,以及我应该如何解决这个问题。
谢谢!
您不能使用
base
类引用来创建类型为 base
的派生实例的副本。 Eigen::ArrayBase
似乎没有虚拟clone
所以你的选择基本上是......
返回参考(可能是
const
):
template <typename Derived> auto& myFun(const Eigen::ArrayBase<Derived>& x){
return x;
}
或返回正确的类型:
template <typename Derived> Derived myFun(const Eigen::ArrayBase<Derived>& x){
return x;
}