获得特征矩阵元素类型的好方法

时间:2017-06-24 16:05:04

标签: c++ types eigen

我正在为我的项目在std::vector Eigen 之间编写一个简单的界面。对于简单的矩阵 - 矩阵乘法码:

template<typename MatrixElementType1, typename MatrixElementType2>
    inline auto _matmat( const vector<MatrixElementType1>& Mat1, 
                         const vector<MatrixElementType2>& Mat2,
                         const size_t M, const size_t N, const size_t K)
    {
        using MatrixType1 = Matrix<MatrixElementType1, Dynamic, Dynamic>;
        using MatrixType2 = Matrix<MatrixElementType2, Dynamic, Dynamic>;
        Map<const MatrixType1> m1(Mat1.data(), M, N); 
        Map<const MatrixType2> m2(Mat2.data(), N, K); 
        auto rst = m1 * m2; 
        return vector<???>(rst.data(), rst.data() + rst.size());

    }

问题是我应该使用什么??? ..我知道decltype(rst(0,0))有效,但有更优雅的方式吗?似乎decltype(rst)::value_type不适用于 Eigen Matrix ..

1 个答案:

答案 0 :(得分:1)

首先,由于m1*m2返回表达式而不是产品的结果,因此如果使用auto,则需要显式计算它:

auto rst = (m1 * m2).eval();

然后,您可以使用decltype(rst)::Scalar获取标量类型。一个更好的策略可能是声明一个适当类型和大小的std :: vector,并映射它:

typedef decltype(m1*m2)::Scalar ResScalar;
vector<ResScalar> res(M,K);
Matrix<ResScalar,Dynamic,Dynamic>::Map(res.data(),M,K).noalias() = m1*m2;
return res;