Добрый день!
Подскажите, пожалуйста, как компилятор VS 6.0 поведёт себя со следующим шаблоном:
template <class T> CList
{
public:
// ...
private:
T* pT;
};
Внутри шаблона будет присутствовать только указатель на T. В коде программы будут использоваться, скажем, CList<CString> и CList<CNumeric>. Интересует, будет ли компилятор создавать 2 разных класса CList<CString> и CList<CNumeric>, или же код останется один, но просто будут правильно приводиться типы?
Здравствуйте, 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 разных класса.
К счастью компиляторы умеют оптимизировать подобные конструкции.
Здравствуйте, 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>, или же код останется один, но просто будут правильно приводиться типы?
для каждого типа с которым инстанцируется шаблон, будет генерироваться свой класс.
Чтобы не происходило раздувания кода, если возможно, выделяют в базовый класс всю функциональность не зависящую от аргумента шаблона.
Здравствуйте, _nn_, Вы писали:
__>С этим обстоятельством есть проблема, скажем для CList<int> и CList<long> даже когда sizeof(int)==sizeof(long) будут созданны 2 разных класса.
__>К счастью компиляторы умеют оптимизировать подобные конструкции.
Компиляторы или же всё-таки линковщики?
... << Rsdn@Home 1.1.4 beta 1 >>
Здравствуйте, ArtDenis, Вы писали:
AD>Здравствуйте, _nn_, Вы писали:
__>>С этим обстоятельством есть проблема, скажем для CList<int> и CList<long> даже когда sizeof(int)==sizeof(long) будут созданны 2 разных класса.
__>>К счастью компиляторы умеют оптимизировать подобные конструкции.
AD>Компиляторы или же всё-таки линковщики?
Разумеется линкеры