[英]Does the typename keyword exist in C++, for backwards compatibility with “C templates?”
我正在學習C ++課程,而我的老師在傳遞中提到C ++中存在typename
關鍵字(而不是在模板聲明中使用class
關鍵字),以便向后兼容“C模板”。
這引起了我的注意。 我從來沒有見過或聽說過C ++的模板之類的東西(除了,也許是預處理器......在ANSI C中根本不是同一個東西)。所以,我是否錯過了某個地方的巨大東西,或者這是一個非常深奧的東西通過gcc
或其他東西擴展,還是我的老師離開基地?
我認為你的老師不在基地。
請參閱Stan Lippman的帖子:為什么C ++支持類型參數的類和類型名稱 ,這是C ++支持這兩者的真正原因。
也許你的老師所針對的短語是“......為了與C 類型向后兼容”,即,當T
是C風格的內置類型時,識別template<class T>
會產生誤導的問題。正如其他人所說的那樣,作為char
或int
。 但那不是一堂課! :-)
不久之前,一些GCC人員建議將模板機制提供給C編譯器將是實現C99的<tgmath.h>
的好方法,但這似乎沒有任何結果。
你的老師正在努力。 C中沒有模板這樣的東西typename
關鍵字的存在有兩個原因:
說template<typename T>
比template<class T>
更有意義,因為T
可以是非類型類型,如int
或double
。
它可用於解析A::B * foo;
等聲明中的解析歧義A::B * foo;
。 這是聲明一個名為foo
的變量,還是一個乘法表達式? (答案:它被解析為后者。要使它成為聲明,寫入類型名稱typename A::B *foo;
它告訴編譯器將A::B
解釋為類型名稱,而不是變量名稱。)
有關詳細說明,請參見http://pages.cs.wisc.edu/~driscoll/typename.html 。
不,沒有C模板這樣的東西。 typename
甚至不是C中的關鍵字。
我想說C真的沒有原生模板的東西,但是,你可以通過某種MetaProgramming使其工作正常, 看看你會發現如何...
另一個重要的事情是C是一種通用的編程語言,因此可以通過更多努力完成諸如面向對象,模板和其他一些事情。
像Gnome這樣的項目證明它可以做得非常好。
PS:對不起我糟糕的英語!
這似乎不對。 在C中,typename根本不是保留字。
也許他們錯過了/記住了,並且正在考慮“C with Classes”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.