c++ - method - standard template library




在C++中是否存在typename關鍵字,以便向後兼容“C模板”? (5)

我正在學習一個C ++類,而且我的老師通過提到在C ++中存在typename關鍵字(相對於在模板聲明中使用class關鍵字),為了向後兼容“C模板”。

這讓我大跌眼鏡 在C中,我從來沒有見過或聽說過類似C ++的模板(可能除了預處理器之外的東西,這根本不是一回事)。所以,我是否錯過了某個地方的東西,或者這是一個非常深奧的東西通過gcc或什麼擴展,或者是我的老師的方式離基地?



不,沒有C模板這樣的東西。 typename甚至不是C中的關鍵字


你的老師正在做事。 C中沒有模板這樣的東西typename關鍵字有兩個原因:

  1. 因為T可以是非類類型,比如int或者double所以比template<class T>template<typename T>更有意義。

  2. 它可以用來解決聲明中的解析歧義,如A::B * foo; 。 這是否聲明了一個名為foo的變量,還是一個乘法表達式? (答案:它被解析為後者,為了使它成為聲明,寫入typename A::B *foo;它告訴編譯器將A::B解釋為類型名稱,而不是變量名稱。

有關詳細說明,請參閱http://pages.cs.wisc.edu/~driscoll/typename.html



我想說的是,C實際上沒有一個本地模板的東西,但是,你可以使它與某種MetaProgramming正常工作看看周圍的網絡,你會發現如何...

另一個重要的事情是C是一種通用的編程語言,所以像Object Orientation,模板和其他一些東西可以做更多的工作。

像Gnome這樣的項目證明它可以做得很好。

PS:對不起我可怕的英語!





standards