Шаблоны с++ |
Здравствуйте, гость ( Вход | Регистрация )
Шаблоны с++ |
kuler |
18.2.2009, 19:19
Сообщение
#1
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
есть к примеру
можно както не писать в заголовке метода template<class Type> void CClass<Type>::met() учитывая что в самом методе параметр типа не нужен? (хотелось бы void CClass::met()) |
|
|
kuler |
19.2.2009, 10:45
Сообщение
#2
|
Танцор диско Группа: Участник Сообщений: 441 Регистрация: 11.9.2008 Из: Москва Пользователь №: 289 Спасибо сказали: 6 раз(а) Репутация: -1 |
Так? нет, забыл написать чтобы было разделение на cpp и h. Соответственно реализация вне описания. В твоём коде тип нужен: каким образом компилятор узнает тип val? посмотрит на объявление класса Каким образом компилятор узнает для какого именно типа этот метод предназначен? ну вот если идет специализация (ты же про неё?) то тогда можно и указать а по умолчанию тот же самый что в заголовке класса |
|
|
Tonal |
20.2.2009, 9:44
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: 17 |
нет, забыл написать чтобы было разделение на cpp и h. Соответственно реализация вне описания. Это называется export template и поддерживается только комой. (подсказка, попробуй вызвать свою метод met из другого cpp и с другим типом чем он реализован. В твоём коде тип нужен: каким образом компилятор узнает тип val? посмотрит на объявление класса У тебя нет класса, есть шаблон класса и там тип val не указан. Для разных типов объектный код функции может существенно отличатся друг от друга. Т.е. не зная какой тип будет подставлен вместо Type в общем случае невозможно создать объектный код для шаблона метода met. Стало быть помещать его шаблонную реализацию в отдельно компилируемый файл не имеет смысла. Именно по этому большинство компиляторов не поддерживают export template. Каким образом компилятор узнает для какого именно типа этот метод предназначен? ну вот если идет специализация (ты же про неё?) то тогда можно и указать а по умолчанию тот же самый что в заголовке класса Есть полная специализация, частичная специализация и совмещение (перегрузка). Боюсь, что такое опускание усложнит правила реализации компилятора и понимание кода. Например хотя спецификатор virtual перед методом производного класса можно опускать, тем не менее многие советуют его таки писать - это сильно упрощает восприятие интерфейсов. П.С. Да, add method к С++ отношения не имеет. |
|
|
Текстовая версия | Сейчас: 29.1.2025, 4:06 |