Eigen:函数返回作为参数传递的相同矩阵

问题描述 投票:0回答:1

我需要编写一个以 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>'的受保护构造函数

我不明白发生了什么,以及我应该如何解决这个问题。

谢谢!

c++ templates eigen
1个回答
0
投票

您不能使用

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;
}

现场演示

© www.soinside.com 2019 - 2024. All rights reserved.