2010-07-20 440 views
3

是否有區別,例如元編程的預期,在兩個 聲明之間?typedef模板類的聲明

template<typename T> 
struct matrix { 
    typedef matrix self_type; // or 
    typedef matrix<T> self_type; 
}; 

謝謝

+0

通過'結構矩陣 {'我想你的意思'結構矩陣{'。 – kennytm 2010-07-20 19:56:32

+0

@ Kenny謝謝修復 – Anycorn 2010-07-20 19:57:23

回答

6

在這種特殊情況下(類模板中),matrixmatrix<T>的簡寫。當你在80個欄目中填寫所有內容時,整天寫很多毛茸茸的模板,速記是值得歡迎的。

請注意,您也可以縮寫方法的參數:

template <typename T> 
struct matrix 
{ 
    typedef matrix my_type; 
    matrix(); // constructor is abbreviated too 
    matrix& operator=(matrix); 
}; 

// Method argument types can be abbreviated too 
// but not result types. 
template <typename T> 
matrix<T>& matrix<T>::operator=(matrix m) 
{ 
    // ... 
} 
+5

請注意,術語是*注入類名*,原始模板可以使用像':: matrix'這樣的限定名稱進行訪問。 – 2010-07-20 20:25:55

0

他們都指的是同一類型。 我可以看到的唯一區別是從性能角度來看: 我想(取決於編譯器實現),矩陣本身就是指類本身,因此它不需要環境中的任何東西。矩陣正在討論由T(即矩陣)模板化的模板類矩陣,因此它可能需要編譯器提供更多的推導機制。但我只是猜測,我從來沒有讀過任何關於這個的東西。