如何编写一个返回密集Eigen对象上一元表达式输出的函数?

时间:2014-08-22 11:27:30

标签: c++ eigen

作为一个例子,假设我想编写一个函数来检查密集特征对象中的每个浮点数是否为normal,如果正常则返回1.0对应的位置,或者0.0如果不是。不得立即评估输出,最好采用表达式的形式。

我已经阅读了documentation on passing eigen objects as parameters,这让我尝试了以下内容:

#include <functional>                                                              

#include <Eigen/Dense>                                                             

template <typename Derived>                                                        
auto Fun(const Eigen::DenseBase<Derived>& matrix) -> decltype(matrix.unaryExpr(std::ptr_fun<typename Derived::Scalar, bool>(std::isnormal)).template cast<typename Derived::Scalar>())
{                                                                                  
    return matrix.unaryExpr(std::ptr_fun<typename Derived::Scalar, bool>(std::isnormal)).template cast<typename Derived::Scalar>();
}                                                                                  

int main()                                                                         
{                                                                                  
    Eigen::Matrix<double, -1, -1> mat;                                             
    mat.resize(100,100);                                                           
    mat.fill(100);                                                                 
    auto mat2 = Fun(mat);                                                          

    return 0;                                                                      
}                                                                                  

此操作失败,错误为unaryExpr类型的对象未定义Eigen::DenseBase<Derived>,果然,如果我查看the documentation for DenseBase,我发现没有此类功能。

那么,每次我想调用此函数并将特征对象转换为已评估的Matrix时,如果没有强制求值,我该如何实现呢?

0 个答案:

没有答案