Это просто артефакт правил синтаксиса - синтаксис позволяет вам использовать ключевые слова class
или typename
для указания параметра шаблона типа. В противном случае параметр должен быть параметром шаблона «нетипичного» типа (в основном это целочисленный, указательный или ссылочный тип).
Я полагаю, что Страуструп (и тот, от кого он мог бы получить информацию) решил, что нет необходимости включать struct
в качестве ключевого слова a, чтобы указать параметр шаблона типа, поскольку не было необходимости обратной совместимости с C.
На самом деле, мое воспоминание (мне придется читать книги, когда я вернусь домой) это то, что, когда typename
было добавлено для указания параметра типа шаблона, Страуструпу бы понравилось чтобы использовать для этой цели ключевое слово class
(поскольку оно сбивало с толку), но на него полагалось слишком много кода.
Edit:
Оказывается, история больше похожа (из записи в блоге Стэна Липпмана ):
Причина двух ключевых слов
исторические. В оригинальном шаблоне
Спецификация, Страуструп повторно использовал
существующее ключевое слово класса, чтобы указать
параметр типа, а не вводить
новое ключевое слово, которое может, конечно, сломаться
существующие программы. Это не было
новое ключевое слово не рассматривалось - просто
что это не было сочтено необходимым
учитывая его потенциальное нарушение. И вверх
до стандарта ISO-C ++, это было
единственный способ объявить тип
параметр.
Повторное использование существующих ключевых слов
всегда сеять растерянность То, что мы нашли, это
что начинающие были [интересно]
будет ли использование класса
ограничен или ограничен тип
аргументы, которые пользователь может указать, чтобы быть
типы классов, а не, скажем,
встроенный или указатель типа. Так что
было какое-то чувство, что не имея
ввел новое ключевое слово было
ошибка.
Во время стандартизации, определенные
конструкции были обнаружены в
определение шаблона, которое разрешено в
выражения, хотя они были предназначены
указывать декларации
...
Комитет решил, что новый
Ключевое слово было просто билет, чтобы получить
компилятор от своей неудачной одержимости
с выражениями. Новое ключевое слово было
самоописываемое имя.
...
Поскольку ключевое слово было в платежной ведомости,
черт, почему бы не исправить путаницу, вызванную
первоначальным решением повторно использовать
ключевое слово класса. Конечно, учитывая
обширный объем существующего кода и
книги и статьи и разговоры и
сообщения с использованием ключевого слова класса, они
решил также сохранить поддержку для этого
использование ключевого слова, а также. Так вот
почему у вас есть оба.