簡體   English   中英

為了向后兼容“C模板”,C ++中是否存在typename關鍵字?

[英]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>會產生誤導的問題。正如其他人所說的那樣,作為charint 但那不是一堂課! :-)

不久之前,一些GCC人員建議將模板機制提供給C編譯器將是實現C99的<tgmath.h>的好方法,但這似乎沒有任何結果。

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

  1. template<typename T>template<class T>更有意義,因為T可以是非類型類型,如intdouble

  2. 它可用於解析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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM