crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Шаблоны с++
Tonal
  опции профиля:
сообщение 20.2.2009, 9:44
Сообщение #11


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Цитата(kuler @ 19.2.2009, 13:45) *
нет, забыл написать чтобы было разделение на cpp и h. Соответственно реализация вне описания.

Это называется export template и поддерживается только комой.
(подсказка, попробуй вызвать свою метод met из другого cpp и с другим типом чем он реализован.

Цитата(kuler @ 19.2.2009, 13:45) *
Цитата(Tonal @ 19.2.2009, 9:09) *
В твоём коде тип нужен: каким образом компилятор узнает тип val?

посмотрит на объявление класса

У тебя нет класса, есть шаблон класса и там тип val не указан.
Для разных типов объектный код функции может существенно отличатся друг от друга. Т.е. не зная какой тип будет подставлен вместо Type в общем случае невозможно создать объектный код для шаблона метода met.
Стало быть помещать его шаблонную реализацию в отдельно компилируемый файл не имеет смысла.
Именно по этому большинство компиляторов не поддерживают export template.

Цитата(kuler @ 19.2.2009, 13:45) *
Цитата(Tonal @ 19.2.2009, 9:09) *
Каким образом компилятор узнает для какого именно типа этот метод предназначен?

ну вот если идет специализация (ты же про неё?) то тогда можно и указать а по умолчанию тот же самый что в заголовке класса

Есть полная специализация, частичная специализация и совмещение (перегрузка).
Боюсь, что такое опускание усложнит правила реализации компилятора и понимание кода.
Например хотя спецификатор virtual перед методом производного класса можно опускать, тем не менее многие советуют его таки писать - это сильно упрощает восприятие интерфейсов. :)

П.С. Да, add method к С++ отношения не имеет. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 20.2.2009, 11:03
Сообщение #12


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(Tonal @ 20.2.2009, 9:44) *
Да, add method к С++ отношения не имеет.

весь вопрос был изза того что в ломы лишнюю по моему мнению фигню писать, а это как раз избавляет от необходимости
Цитата(AD @ 19.2.2009, 21:57) *
Шаблоны необходимо описывать в inl-файлах,

это вообще не понял чо такое

Цитата(Tonal @ 20.2.2009, 9:44) *
и с другим типом чем он реализован.

что значит сия фраза?

Цитата(Tonal @ 20.2.2009, 9:44) *
попробуй вызвать свою метод met из другого cpp

ага, он типа пишет анрезолв?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 20.2.2009, 11:39
Сообщение #13


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Есть очень хорошая книга: Шаблоны C++: справочник разработчика.
Там всё это очень хорошо описано.
Хотя для начала лучше почитать Страуструпа, Мейерса и Саттера. :)

Сообщение отредактировал Tonal - 20.2.2009, 11:39
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 20.2.2009, 12:11
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(kuler @ 20.2.2009, 11:03) *
Цитата(AD)
Шаблоны необходимо описывать в inl-файлах,

это вообще не понял чо такое

Такой же файл, как и h-file, cpp-file, c-file! Ничем не отличается. Объявление пишешь в этом файле, подключаешь его в cpp или в h файле (точно не помню), а в cpp-файле пишешь реализацию. Но а вообще эти шаблоны лучше вместе писать, как тебе посоветовал Tonal
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 20.2.2009, 16:26
Сообщение #15


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


Цитата(AD @ 20.2.2009, 12:11) *
лучше вместе писать, как тебе посоветовал Tonal

да, но получается что в хедере будет вся реализация и он может быть к примеру 8000 строк, что убивает весь смысл хидеров
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 20.2.2009, 17:04
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(kuler @ 20.2.2009, 16:26) *
да, но получается что в хедере будет вся реализация и он может быть к примеру 8000 строк, что убивает весь смысл хидеров

Тогда постарайся понять о чем я говорю и сделай так, как я сказал. Вроде бы все понятно объяснил! :)

Сообщение отредактировал AD - 20.2.2009, 17:05
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 26.2.2009, 13:53
Сообщение #17


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Цитата(kuler @ 20.2.2009, 16:26) *
Цитата(AD @ 20.2.2009, 12:11) *
лучше вместе писать, как тебе посоветовал Tonal

да, но получается что в хедере будет вся реализация и он может быть к примеру 8000 строк, что убивает весь смысл хидеров

У шаблонов не предусмотрена реализация, потому что шаблон - это именно шаблон, то есть нужная реализация генерируется автоматически. Здесь концепция шабона пересекается с концепцией заголовочных файлов... :)
Вообще тут выше порекомендовали очень правильную книгу на эту тему, большинство вопросов там освещено. Десятая глава.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.3.2009, 11:26
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


kuler, удалось сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 3.3.2009, 16:12
Сообщение #19


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


AD, плюнул, ибо меня не устраивает отсутствие безгеморройного разбиения на срр и h. Как нить в другой раз чо нить напишу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.1.2025, 23:49