C++沉思錄__typename的用法
阿新 • • 發佈:2018-11-22
關於typename的用法,比較為大家所熟知的有一種:類模型引入的宣告
template<typename T>
class Atype
{
}
還有另外一種,就是一種很特別的情況。
當使用模板型別中定義的型別時,該怎麼辦呢?可以使用關鍵字typename。
/* 從定義中可以說明 typedef typename T::value_type value_type; 這句話強調 我們定義了一種型別的變數 這種變數型別依賴於模板引數型別 模板類中一定定義了這樣一種型別 */ class AType { public: typedef int value_type; }; template<class T> class TSample { typedef typename T::value_type value_type; }
當使用TSample<AType>的時候,TSample的value_type就變成了AType::value_type。
當需要一個非例項化模板內部定義的型別時,就必須使用typename了。比如,定義一個模板類,這個類又使用了std::vector,
template<class T>
struct MyVector {
std::vector<T> vec;
typedef typename std::vector<T>::iterator;
};
為什麼這樣定義呢,C++預設就是將value_type解釋為一個變數的