![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Tonal |
![]()
Сообщение
#11
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(kuler @ 19.2.2009, 13:45) Link нет, забыл написать чтобы было разделение на cpp и h. Соответственно реализация вне описания. Это называется export template и поддерживается только комой. (подсказка, попробуй вызвать свою метод met из другого cpp и с другим типом чем он реализован. Цитата(kuler @ 19.2.2009, 13:45) Link Цитата(Tonal @ 19.2.2009, 9:09) Link В твоём коде тип нужен: каким образом компилятор узнает тип val? посмотрит на объявление класса У тебя нет класса, есть шаблон класса и там тип val не указан. Для разных типов объектный код функции может существенно отличатся друг от друга. Т.е. не зная какой тип будет подставлен вместо Type в общем случае невозможно создать объектный код для шаблона метода met. Стало быть помещать его шаблонную реализацию в отдельно компилируемый файл не имеет смысла. Именно по этому большинство компиляторов не поддерживают export template. Цитата(kuler @ 19.2.2009, 13:45) Link Цитата(Tonal @ 19.2.2009, 9:09) Link Каким образом компилятор узнает для какого именно типа этот метод предназначен? ну вот если идет специализация (ты же про неё?) то тогда можно и указать а по умолчанию тот же самый что в заголовке класса Есть полная специализация, частичная специализация и совмещение (перегрузка). Боюсь, что такое опускание усложнит правила реализации компилятора и понимание кода. Например хотя спецификатор virtual перед методом производного класса можно опускать, тем не менее многие советуют его таки писать - это сильно упрощает восприятие интерфейсов. ![]() П.С. Да, add method к С++ отношения не имеет. ![]() |
|
|
kuler |
![]()
Сообщение
#12
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Tonal @ 20.2.2009, 9:44) Link Да, add method к С++ отношения не имеет. весь вопрос был изза того что в ломы лишнюю по моему мнению фигню писать, а это как раз избавляет от необходимости Цитата(AD @ 19.2.2009, 21:57) Link Шаблоны необходимо описывать в inl-файлах, это вообще не понял чо такое Цитата(Tonal @ 20.2.2009, 9:44) Link и с другим типом чем он реализован. что значит сия фраза? Цитата(Tonal @ 20.2.2009, 9:44) Link попробуй вызвать свою метод met из другого cpp ага, он типа пишет анрезолв? |
|
|
Tonal |
![]()
Сообщение
#13
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Есть очень хорошая книга: Link.
Там всё это очень хорошо описано. Хотя для начала лучше почитать Страуструпа, Мейерса и Саттера. ![]() Сообщение отредактировал Tonal - 20.2.2009, 11:39 |
|
|
AD |
![]()
Сообщение
#14
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(kuler @ 20.2.2009, 11:03) Link Цитата(AD) Шаблоны необходимо описывать в inl-файлах, это вообще не понял чо такое Такой же файл, как и h-file, cpp-file, c-file! Ничем не отличается. Объявление пишешь в этом файле, подключаешь его в cpp или в h файле (точно не помню), а в cpp-файле пишешь реализацию. Но а вообще эти шаблоны лучше вместе писать, как тебе посоветовал Tonal |
|
|
kuler |
![]()
Сообщение
#15
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(AD @ 20.2.2009, 12:11) Link лучше вместе писать, как тебе посоветовал Tonal да, но получается что в хедере будет вся реализация и он может быть к примеру 8000 строк, что убивает весь смысл хидеров |
|
|
AD |
![]()
Сообщение
#16
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(kuler @ 20.2.2009, 16:26) Link да, но получается что в хедере будет вся реализация и он может быть к примеру 8000 строк, что убивает весь смысл хидеров Тогда постарайся понять о чем я говорю и сделай так, как я сказал. Вроде бы все понятно объяснил! ![]() Сообщение отредактировал AD - 20.2.2009, 17:05 |
|
|
Andrew Selivanov |
![]()
Сообщение
#17
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 249 Регистрация: 9.10.2007 Из: Москва Пользователь №: 3 Спасибо сказали: 15 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(kuler @ 20.2.2009, 16:26) Link Цитата(AD @ 20.2.2009, 12:11) Link лучше вместе писать, как тебе посоветовал Tonal да, но получается что в хедере будет вся реализация и он может быть к примеру 8000 строк, что убивает весь смысл хидеров У шаблонов не предусмотрена реализация, потому что шаблон - это именно шаблон, то есть нужная реализация генерируется автоматически. Здесь концепция шабона пересекается с концепцией заголовочных файлов... ![]() Вообще тут выше порекомендовали очень правильную книгу на эту тему, большинство вопросов там освещено. Десятая глава. |
|
|
AD |
![]()
Сообщение
#18
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: ![]() ![]() ![]() |
kuler, удалось сделать?
|
|
|
kuler |
![]()
Сообщение
#19
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
AD, плюнул, ибо меня не устраивает отсутствие безгеморройного разбиения на срр и h. Как нить в другой раз чо нить напишу.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 2.8.2025, 7:34 |