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


         

некорректная программа: явная специализация const


int main() {

   // конкретизация функции

   // const char* max< const char* >( const char*, const char* );

   const char *p = max( "hello", "world" );

   cout << "p: " << p << endl;

   return 0;

}

// некорректная программа: явная специализация const char *:

// имеет приоритет над обобщенным определением шаблона

typedef const char *PCC;

template<> PCC max< PCC >(PCC s1, PCC s2 ) { /* ... */ }

В предыдущем примере конкретизация max(const char*, const char*) предшествует объявлению явной специализации. Поэтому компилятор имеет право предположить, что функция должна быть конкретизирована по обобщенному определению шаблона. Однако в программе не может одновременно существовать явная специализация и экземпляр, конкретизированный по тому же шаблону с тем же множеством аргументов. Когда в исходном файле после конкретизации встречается явная специализация max(const char*, const char*), компилятор выдает сообщение об ошибке.

Если программа состоит из нескольких файлов, то объявление явной специализации шаблона должно быть видимо в каждом файле, в котором она используется. Не разрешается в одних файлах конкретизировать шаблон функции по обобщенному определению, а в других специализировать с тем же множеством аргументов. Рассмотрим следующий пример:

// --------- max.h -------

// обобщенное определение шаблона

template <class Type>

   Type max( Type t1, Type t2 ) { /* ... */ }

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

#include <iostream>

#include "max.h"

void another();

int main() {

   // конкретизация функции

   // const char* max< const char* >( const char*, const char* );

   const char *p = max( "hello", "world" );

   cout << "p: " << p << endl;

   another();

   return 0;

}

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

#include <iostream>

#include <cstring>

#include "max.h"


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





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