Я пытаюсь написать функцию, которая принимает Eigen :: Matrix из типа 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;
}
Однако, как только я создаю "плавающий" шаблон:
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: В функции 'Eigen :: Matrix core :: math :: foo (const Eigen :: Matrix &)': ... / utils.hpp: 77: 47: ошибка: запрос на транспонирование члена 'in' (0, 0) ', который не относится к типу класса' int 'result.block ‹3,3> (0,0) = T.block‹ 3,3> (0,0) .transpose ( );
В чем может быть проблема?