Если класс специализируется целиком, лексемы
Если класс специализируется целиком, лексемы 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
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий