本征通用函数可处理不同的数据类型

时间:2018-06-19 11:44:40

标签: eigen

我正在尝试编写一个通用函数,该函数接收如下的DenseBase<Derived>参数:

template<class Derived>
MatrixXd Math::gradient(const DenseBase<Derived> &y, const Dimension dimension)
{
    ...
    Derived v = dimension == COLUMNS ? y.derived() : y.derived().transpose();
    ...
}

以这种方式调用函数时出现错误:

const VectorXd g = Math::gradient(curve/ peak);

curve/ peak表达式返回CwiseBinaryOp类型,该类型成为Derived模板函数的Math::gradient类型。

但是,y.derived().transpose()表达式返回Transpose<MatrixType>,由于CwiseBinaryOp的数据类型不同,因此会产生编译错误。

我知道我可以调用以前将Math::gradient存储在curve/ peak中的VectorXd函数来解决问题,但是,如何编写该函数来处理这种不同的数据类型? / p>

非常感谢您。

1 个答案:

答案 0 :(得分:0)

我想我已经为自己的问题找到了解决方案(抱歉,对该问题的解释不充分)。

通过使用eval()变量DenseBase<Derived>的{​​{1}}方法,Eigen解析“中间”表达式类型,例如yCwiseBinaryOp在我的特定情况下,为Transpose<MatrixType>变量类型。

因此可能的解决方案可能是:

PlainObject

非常感谢您的关注