компиляция шаблонов в c++
От: ABK Украина  
Дата: 12.02.05 12:56
Оценка:
Добрый день!

Подскажите, пожалуйста, как компилятор VS 6.0 поведёт себя со следующим шаблоном:

template <class T> CList
{
public:
  // ...
private:
  T* pT;
};

Внутри шаблона будет присутствовать только указатель на T. В коде программы будут использоваться, скажем, CList<CString> и CList<CNumeric>. Интересует, будет ли компилятор создавать 2 разных класса CList<CString> и CList<CNumeric>, или же код останется один, но просто будут правильно приводиться типы?
Re: компиляция шаблонов в c++
От: _nn_  
Дата: 12.02.05 13:06
Оценка: 2 (1)
Здравствуйте, ABK, Вы писали:

ABK>Добрый день!


ABK>Подскажите, пожалуйста, как компилятор VS 6.0 поведёт себя со следующим шаблоном:


ABK>
ABK>template <class T> CList
ABK>{
ABK>public:
ABK>  // ...
ABK>private:
ABK>  T* pT;
ABK>};
ABK>

ABK> Внутри шаблона будет присутствовать только указатель на T. В коде программы будут использоваться, скажем, CList<CString> и CList<CNumeric>. Интересует, будет ли компилятор создавать 2 разных класса CList<CString> и CList<CNumeric>, или же код останется один, но просто будут правильно приводиться типы?

Для каждого типа создается свой тип и свой набор функций.
Приведение типа здесь не применяется.

С этим обстоятельством есть проблема, скажем для CList<int> и CList<long> даже когда sizeof(int)==sizeof(long) будут созданны 2 разных класса.
К счастью компиляторы умеют оптимизировать подобные конструкции.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: компиляция шаблонов в c++
От: korzhik Россия  
Дата: 12.02.05 13:13
Оценка: 2 (1)
Здравствуйте, ABK, Вы писали:

ABK>Добрый день!


ABK>Подскажите, пожалуйста, как компилятор VS 6.0 поведёт себя со следующим шаблоном:


ABK>
ABK>template <class T> CList
ABK>{
ABK>public:
ABK>  // ...
ABK>private:
ABK>  T* pT;
ABK>};
ABK>

ABK> Внутри шаблона будет присутствовать только указатель на T. В коде программы будут использоваться, скажем, CList<CString> и CList<CNumeric>. Интересует, будет ли компилятор создавать 2 разных класса CList<CString> и CList<CNumeric>, или же код останется один, но просто будут правильно приводиться типы?

для каждого типа с которым инстанцируется шаблон, будет генерироваться свой класс.
Чтобы не происходило раздувания кода, если возможно, выделяют в базовый класс всю функциональность не зависящую от аргумента шаблона.
Re[2]: компиляция шаблонов в c++
От: ArtDenis Россия  
Дата: 12.02.05 14:26
Оценка: +1
Здравствуйте, _nn_, Вы писали:

__>С этим обстоятельством есть проблема, скажем для CList<int> и CList<long> даже когда sizeof(int)==sizeof(long) будут созданны 2 разных класса.

__>К счастью компиляторы умеют оптимизировать подобные конструкции.

Компиляторы или же всё-таки линковщики?
... << Rsdn@Home 1.1.4 beta 1 >>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[3]: компиляция шаблонов в c++
От: _nn_  
Дата: 12.02.05 14:57
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, _nn_, Вы писали:


__>>С этим обстоятельством есть проблема, скажем для CList<int> и CList<long> даже когда sizeof(int)==sizeof(long) будут созданны 2 разных класса.

__>>К счастью компиляторы умеют оптимизировать подобные конструкции.

AD>Компиляторы или же всё-таки линковщики?

Разумеется линкеры
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.