0
我正在尝试编写一个函数,它可以从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;
}
但是,只要我做 “浮动” 的模板:
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;
}
我得到这个错误使用gcc 4.9.1在Linux上:
.../utils.hpp: In function 'Eigen::Matrix core::math::foo(const Eigen::Matrix&)': .../utils.hpp:77:47: error: request for member 'transpose' in '(0, 0)', which is of non-class type 'int' result.block<3,3>(0,0) = T.block<3,3>(0,0).transpose();
这里有什么问题?
真棒,这作品!尽管我不确定我是否理解到底发生了什么,以及“模板块”的作用......可以详细解释还是给我一些解释指示? – 2014-10-02 13:01:00
你可以看看[我为什么要把模板和类型名关键字](http://stackoverflow.com/questions/610245/where-and-why -DO-I-有到把最模板和类型名称的关键字) – Jarod42 2014-10-02 13:04:07