我正在尝试编写一个通用函数,该函数接收如下的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>
非常感谢您。
答案 0 :(得分:0)
我想我已经为自己的问题找到了解决方案(抱歉,对该问题的解释不充分)。
通过使用eval()
变量DenseBase<Derived>
的{{1}}方法,Eigen解析“中间”表达式类型,例如y
或CwiseBinaryOp
在我的特定情况下,为Transpose<MatrixType>
变量类型。
因此可能的解决方案可能是:
PlainObject
非常感谢您的关注