C++中,typename的作用有兩個:
1.模闆中用于引入一個模闆參數
2.當通路一個類或結構體中的自定義類型的時候,用typename修飾,防止文法歧義。
考慮以下代碼:
template<typename T>
void foo(const T& t)
{
// 聲明一個指向某個類型為T::bar的對象的指針
T::bar* p;
}
struct StructWithBarAsType
{
typedef int bar;
};
int main()
{
StructWithBarAsType x;
foo(x);
}
函數foo中,編譯器根本不知道T::bar是什麼資料類型,甚至他會以為這是一個T中的一個變量。是以為了防止這種歧義,我們應該用typename來辨別。