2014-10-02 96 views
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();

這裏有什麼問題?

回答

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

真棒,這作品!儘管我不確定我是否理解到底發生了什麼,以及「模板塊」的作用......可以詳細解釋還是給我一些解釋指示? – 2014-10-02 13:01:00

+1

你可以看看[我爲什麼要把模板和類型名關鍵字](http://stackoverflow.com/questions/610245/where-and-why -DO-I-有到把最模板和類型名稱的關鍵字) – Jarod42 2014-10-02 13:04:07