С++ для начинающих


         

Если класс специализируется целиком, лексемы


Если класс специализируется целиком, лексемы template<> помещаются только перед определением явной специализации всего шаблона:

#include "QueueLD.h"

// определяет функцию-член min()

// из специализированного шаблона класса

LongDouble Queue<LongDouble>::min() { }

Класс не может в одних файлах конкретизироваться из общего определения шаблона, а в других – из специализированного, если задано одно и то же множество аргументов. Например, специализацию шаблона QueueItem<LongDouble> необходимо объявлять в каждом файле, где она используется:

// ---- File1.C ----

#include "Queue.h"

void ReadIn( Queue<LongDouble> *pq ) {

   // использование pq->add()

   // приводит к конкретизации QueueItem<LongDouble>

}

// ---- File2.C ----

#include "QueueLD.h"

void ReadIn( Queue<LongDouble> * );

int main() {

   // используется определение специализации для Queue<LongDouble>

   Queue<LongDouble> *qld = new Queue<LongDouble>;

   ReadIn( qld );

   // ...

}

Эта программа некорректна, хотя большинство компиляторов ошибку не обнаружат: заголовочный файл QueueLD.h следует включать во все файлы, где используется Queue<LongDouble>, причем до первого использования.


Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий