Подтвердить что ты не робот

Имеет ли ключевое слово typename в С++, для обратной совместимости с "C шаблонами?"

Im принимает класс С++, и мой учитель попутно отметил, что ключевое слово typename существует в С++ (в отличие от использования ключевого слова class в объявлении шаблона), для обратной совместимости с "шаблонами C".

Это взорвало мой разум. Я никогда не видел и не слышал о чем-то вроде шаблонов С++ (за исключением, может быть, препроцессора... и это совсем не то же самое) в ANSI C. Итак, я пропустил что-то огромное где-то, или это действительно эзотерическое расширение на gcc или что-то в этом роде, или мой учитель вне базы?

4b9b3361

Ответ 3

Возможно, фраза, к которой стремился ваш учитель, соответствовала "... для обратной совместимости с C типами", т.е. распознаванием проблемы, которая template<class T> вводит в заблуждение, когда T является встроенным типом C-стиля, таким как char или int, как говорили другие. Но это не класс!: -)

В то время как несколько людей из GCC были предлагая, что создание механизма шаблонов для компилятора C было бы хорошим способом реализации C99 <tgmath.h>, но это, похоже, ни к чему.

Ответ 4

Ваш учитель все обдумывает. Там нет такой вещи, как шаблоны в C. Ключевое слово typename существует по двум причинам:

  • Имеет смысл сказать template<typename T>, чем template<class T>, поскольку T может быть неклассовыми типами, такими как int или double.

  • Его можно использовать для разрешения разбора неоднозначностей в объявлениях типа A::B * foo;. Означает ли это переменную с именем foo, или это выражение умножения? (Ответ: он анализируется как последний. Чтобы сделать это декларацией, напишите typename A::B *foo;, в котором компилятор должен интерпретировать A::B как имя типа, а не имя переменной.)

Подробнее см. http://pages.cs.wisc.edu/~driscoll/typename.html.

Ответ 5

Нет, нет такой вещи, как шаблон C. typename не является ключевым словом в C.

Ответ 6

Это не кажется правильным. typename не является зарезервированным словом вообще в C.

Возможно, они оговорились/вспомнили и думали о "C с классами".

Ответ 7

Я хочу сказать, что у C действительно нет родного материала шаблона, однако вы можете заставить его работать нормально с каким-то MetaProgramming, посмотрите в Интернете, вы найдете, как...

Еще одна важная вещь заключается в том, что C является языком программирования для общего назначения, поэтому многое другое, например Object Orientation, template и некоторые другие вещи, можно сделать с меньшими усилиями.

Проекты, подобные Gnome, являются доказательством того, что это можно сделать и очень хорошо.

P.S.: Извините за мой страшный английский!!!