crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Шаблоны с++
kuler
  опции профиля:
сообщение 18.2.2009, 19:19
Сообщение #1


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

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

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




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


есть к примеру
template<class Type> class CClass
{

public:
  Type* val;
  void met();
};
template<class Type> void CClass<Type>::met()
{
  ShowMessage(*val);
}

можно както не писать в заголовке метода template<class Type> void CClass<Type>::met() учитывая что в самом методе параметр типа не нужен?
(хотелось бы void CClass::met())
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 19.2.2009, 9:09
Сообщение #2


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

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

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




Репутация:   17  


Так?
template<class Type> class CClass
{

public:
  Type* val;
  void met() {
    ShowMessage(*val);
  }
};


1. В твоём коде тип нужен: каким образом компилятор узнает тип val?
2. Даже в том случае, если в методе тип таки не используется, сам метод может отличатся для разных типов. Каким образом компилятор узнает для какого именно типа этот метод предназначен?

Сообщение отредактировал Tonal - 19.2.2009, 9:10
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 19.2.2009, 10:45
Сообщение #3


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

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

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




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


Цитата(Tonal @ 19.2.2009, 9:09) *
Так?

нет, забыл написать чтобы было разделение на cpp и h. Соответственно реализация вне описания.
Цитата(Tonal @ 19.2.2009, 9:09) *
В твоём коде тип нужен: каким образом компилятор узнает тип val?

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

ну вот если идет специализация (ты же про неё?) то тогда можно и указать а по умолчанию тот же самый что в заголовке класса
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 19.2.2009, 18:04
Сообщение #4


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

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

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




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


ну что, никто круто шаблоны не знает?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 19.2.2009, 18:08
Сообщение #5


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

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




Репутация:   3  


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

нельзя в шаблонах выносить реализацию отдельно от описания, я почти уверен что ни один компилятор не скомпилит отдельную реализацию от описания
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 19.2.2009, 18:11
Сообщение #6


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

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

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




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


ну мой код компилится и работает
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 19.2.2009, 20:12
Сообщение #7


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

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

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




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


кстати нашел уже неплохой метод - в студии можно добавлять методы через "add method" и шаблоны там поддерживаются, соответственно вручную писать не надо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.2.2009, 21:57
Сообщение #8


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

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

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




Репутация:   17  


Цитата(void*)
нельзя в шаблонах выносить реализацию отдельно от описания, я почти уверен что ни один компилятор не скомпилит отдельную реализацию от описания

Можно. Шаблоны необходимо описывать в inl-файлах, а потом добавлять в header в конце, после всего кода.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.2.2009, 21:59
Сообщение #9


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(AD @ 20.2.2009, 0:57) *
в inl-файлах
такие файлы относятся к студии или к C++ компиляторам?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.2.2009, 22:02
Сообщение #10


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

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

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




Репутация:   17  


Цитата(Litkevich Yuriy @ 19.2.2009, 21:59) *
Цитата(AD @ 20.2.2009, 0:57) *
в inl-файлах
такие файлы относятся к студии или к C++ компиляторам?

нет к visual studio не относятся. Вещь эта работала и в студии, и борланде, и если не ошибаюсь, в g++!

Сообщение отредактировал AD - 19.2.2009, 22:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 16.4.2024, 12:31