Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Class vs Typename, Давно хотел узнать ответ на глупый вопрс 
:(
    Опции темы
Mayk
Дата 27.5.2005, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



чем
template <class _Tp> ....
отличается от
template <typename _Tp>
?


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 27.5.2005, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Mayk
Цитата
чем
template <class _Tp> ....
отличается от
template <typename _Tp>
?
ничем smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
yaja
Дата 27.5.2005, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 30.3.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 1



smile Мне препод по c++ рассказал о том, что Страуструп очень медленно печатает (уж не знаю откуда она это взяла smile ) и чтобы лишний раз не напрягаться, он ввел class smile smile smile

Это сообщение отредактировал(а) yaja - 27.5.2005, 22:39
PM MAIL   Вверх
Alastis
Дата 28.5.2005, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 15.11.2004
Где: Казахстан, Астана

Репутация: 4
Всего: 10



yaja
вообще то вначале ввели class.
Mayk
Вот немножко из Липмана о class и typename:
Цитата
В списке параметров шаблона функции ключевые слова typename и class имеют одинаковый смысл и, следовательно, взаимозаменяемы. Любое из них может использоваться для объявления разных параметров-типов шаблона в одном и том же списке. Для обозначения параметра-типа более естественно, на первый взгляд, употреблять ключевое слово typename, а не class, ведь оно ясно указывает, что за ним следует имя типа. Однако это слово было добавлено в язык лишь недавно, как часть стандарта C++, поэтому в старых программах вы скорее всего встретите слово class. (Не говоря уже о том, что class короче, чем typename, а человек по природе своей ленив.)
Ключевое слово typename упрощает разбор определений шаблонов. (Мы лишь кратко остановимся на том, зачем оно понадобилось. Желающим узнать об этом подробнее рекомендуем обратиться к книге Страуструпа “Design and Evolution of C++”.) При таком разборе компилятор должен отличать выражения-типы от тех, которые таковыми не являются; выявить это не всегда возможно. Например, если компилятор встречает в определении шаблона выражение Parm::name и если Parm – это параметр- тип, представляющий класс, то следует ли считать, что name представляет член-тип класса Parm?
Код

template <class Parm, class U>
Parm minus( Parm* array, U value )
{
Parm::name * p; // это объявление указателя или умножение?
// На самом деле умножение
}
Компилятор не знает, является ли name типом, поскольку определение класса, представленного параметром Parm, недоступно до момента конкретизации шаблона. Чтобы такое определение шаблона можно было разобрать, пользователь должен подсказать компилятору, какие выражения включают типы. Для этого служит ключевое слово typename. Например, если мы хотим, чтобы выражение Parm::name в шаблоне функции minus() было именем типа и, следовательно, вся строка трактовалась как объявление указателя, то нужно  модифицировать текст следующим образом:
Код

template <class Parm, class U>
Parm minus( Parm* array, U value )
{
typename Parm::name * p; // теперь это объявление указателя
}
Ключевое слово typename используется также в списке параметров шаблона для указания того, что параметр является типом.





--------------------
Прости, что я говорю, когда ты меня перебиваешь.
PM MAIL WWW ICQ   Вверх
En_t_end
Дата 28.5.2005, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Цитата
Страуструп очень медленно печатает

smile блин, круто. Хороший препод раз шутить умеет.
PM MAIL ICQ Skype GTalk Jabber   Вверх
Mayk
Дата 29.5.2005, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Хмм, зачем использовать 2 вещи? Чем class не устроил? В стандарте сказано, что "семантической разницы нет"(т.е. "смысл один"? А какая еще разница может быть, кроме "sementic"? Только в кол-ве букв?)
Вот такая вещь тоже работает.
Код

template <class Parm, class U>
Parm minus( Parm* array, U value )
{
class Parm::name * p; // теперь это объявление указателя
}

И где хоть какое-нибудь упрощение? Надо будет поискать "дизайн и эвиолюции".
Блин, надеюсь, что в своих упрощениях ИСОшники не дойдут в будущем до "template<class _Tp> is obsoloted now, use typename instead".




--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
np9mi7
Дата 29.5.2005, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 5
Всего: 10



Страуструп об этом в своей книге пишет.... Ничем они не отличаются....


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Void
Дата 29.5.2005, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(Mayk @ 29.5.2005, 09:47)
Блин, надеюсь, что в своих упрощениях ИСОшники не дойдут в будущем до "template<class _Tp> is obsoloted now, use typename instead".

Да ни в жисть smile Backward compatibility между следующей редакцией и C++03 обещают стопроцентную.
P.S. Когда в последний раз Комитет занимался упрощениями, что-то не припомню? smile

Непродолжительное гугление в c.l.c++(.m) показало, что многие используют такую практику: использовать class, когда параметр шаблона действительно должен являться классом, и typename, когда это простой (встроенный) тип. Я, кстати, тоже так обычно делаю.

Это сообщение отредактировал(а) Void - 29.5.2005, 20:22


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Fantasist
Дата 1.6.2005, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата(yaja @ 27.5.2005, 19:36)
Мне препод по c++ рассказал о том, что Страуструп очень медленно печатает



В оригинале Страуструп говорит, что так как в объявлении шаблона typename и class взаимозаменяемы, то он предпочитает использовать class, так как он занимает меньше места на экране, а этого места ему постоянно не хватает. smile

А зачем ввели typename... ну наверное, чтобы можно было более ясно выразиться. Слово class просто используется и в другом смысле и поэтому не столь явно указывает намерение.




--------------------
Волны гасят ветер...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1127 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.