天天看點

typename的兩個作用

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來辨別。

繼續閱讀