用模板替换标量失败

时间:2014-10-02 08:11:54

标签: c++ templates gcc eigen eigen3

我试图编写一个从double或float类型中获取Eigen :: Matrix的函数。这个函数适用于浮点数:

Eigen::Matrix<float, 4, 4> foo(const Eigen::Matrix<float, 4, 4> &T)
{
   Eigen::Matrix<float, 4, 4> result;
   result.block<3,3>(0,0) = T.block<3,3>(0,0).transpose();
   return result;
}

然而,只要我做了#34;浮动&#34;模板:

template <typename Scalar>
inline Eigen::Matrix<Scalar, 4, 4> foo(const Eigen::Matrix<Scalar, 4, 4> &T)
{
   Eigen::Matrix<Scalar, 4, 4> result;
   result.block<3,3>(0,0) = T.block<3,3>(0,0).transpose();
   return result;
}

我在linux上用gcc 4.9.1得到了这个错误:

  

... / utils.hpp:在函数&#39; Eigen :: Matrix中   core :: math :: foo(const Eigen :: Matrix&amp;)&#39;:   ... / utils.hpp:77:47:错误:请求会员&#39;转置&#39; in&#39;(0,   0)&#39;,这是非类型的&#39; int&#39;       result.block&lt; 3,3&gt;(0,0)= T.block&lt; 3,3&gt;(0,0).transpose();

这可能是什么问题?

1 个答案:

答案 0 :(得分:3)

一旦函数是模板,一些调用依赖于模板,因此您必须添加一些template关键字,请尝试:

template <typename Scalar>
inline Eigen::Matrix<Scalar, 4, 4> foo(const Eigen::Matrix<Scalar, 4, 4> &T)
{
   Eigen::Matrix<Scalar, 4, 4> result;
   result.template block<3,3>(0,0) = T.template block<3,3>(0,0).transpose();
   return result;
}