![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
kuler |
![]()
Сообщение
#1
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
есть к примеру
можно както не писать в заголовке метода template<class Type> void CClass<Type>::met() учитывая что в самом методе параметр типа не нужен? (хотелось бы void CClass::met()) |
|
|
![]() |
kuler |
![]()
Сообщение
#2
|
![]() Танцор диско ![]() ![]() ![]() Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Tonal @ 19.2.2009, 9:09) Link Так? нет, забыл написать чтобы было разделение на cpp и h. Соответственно реализация вне описания. Цитата(Tonal @ 19.2.2009, 9:09) Link В твоём коде тип нужен: каким образом компилятор узнает тип val? посмотрит на объявление класса Цитата(Tonal @ 19.2.2009, 9:09) Link Каким образом компилятор узнает для какого именно типа этот метод предназначен? ну вот если идет специализация (ты же про неё?) то тогда можно и указать а по умолчанию тот же самый что в заголовке класса |
|
|
Tonal |
![]()
Сообщение
#3
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 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 к С++ отношения не имеет. ![]() |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 16.8.2025, 0:43 |