提问者:小点点

用模板替换标量失败


我想写一个函数,它接受double或float类型的特征::矩阵。此函数适用于浮点数:

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;
}

但是,我一把“float”做成模板:

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上使用GCC4.9.1时遇到以下错误:

。。。/utils.hpp:在函数“eigen::Matrix Core::Math::Foo(const eigen::Matrix&)"中:。。。/utils.hpp:77:47:错误:在”(0,0)"中请求成员“transpose”,该成员为非类类型“int.result.block<3 3>(0,0)=T.block<3 3>(0,0).transpose();

这里有什么问题吗?


共1个答案

匿名用户

一旦函数是template,一些调用就依赖于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;
}