Чем явное создание экземпляра:
template void Function< int >(int, int);
отличается от явной специализации:
template <> void Function< int >(int, int);
template <> void Function(int, int);
Примеры из 6го издания Стивена Праты.
Думал-думал, не придумал; пытался гуглить =)
Другие языки программирования и технологии
C++. Шаблоны функций
http://mycpp.ru/cpp/book/ Тут все написано.
// обобщенное определение шаблона
template <class T>
T max( T t1, T t2 ) {
return ( t1 > t2? t1 : t2 );
}
Когда этот шаблон конкретизируется с аргументом типа const char*, то обобщенноеопределение оказывается семантически некорректным, если мы интерпретируем каждый аргумент как строкусимволов в смысле языка C, а не как указатель на символ. В этом случае необходимопредоставить специализированное определение для конкретизации шаблона.
Явное определение специализации – это такое определение, в котором за ключевым словомtemplate следует пара угловых скобок <>, а за ними – определение специализированногошаблона. Здесь указывается имя шаблона, аргументы, для которых онспециализируется, список параметров функции и ее тело. В следующем примере для max(constchar*, const char*) определена явная специализация:
#include <cstring>
// явная специализация для const char*:
// имеет приоритет над конкретизацией шаблона
// по обобщенному определению
typedef const char *PCC;
template<> PCC max< PCC >( PCC s1, PCC s2 ) {
return ( strcmp( s1, s2 ) > 0? s1 : s2 );
Выдрано из книги что указал в начале. В двух словах это перегрузка шаблона функции для конкретных типов.
// обобщенное определение шаблона
template <class T>
T max( T t1, T t2 ) {
return ( t1 > t2? t1 : t2 );
}
Когда этот шаблон конкретизируется с аргументом типа const char*, то обобщенноеопределение оказывается семантически некорректным, если мы интерпретируем каждый аргумент как строкусимволов в смысле языка C, а не как указатель на символ. В этом случае необходимопредоставить специализированное определение для конкретизации шаблона.
Явное определение специализации – это такое определение, в котором за ключевым словомtemplate следует пара угловых скобок <>, а за ними – определение специализированногошаблона. Здесь указывается имя шаблона, аргументы, для которых онспециализируется, список параметров функции и ее тело. В следующем примере для max(constchar*, const char*) определена явная специализация:
#include <cstring>
// явная специализация для const char*:
// имеет приоритет над конкретизацией шаблона
// по обобщенному определению
typedef const char *PCC;
template<> PCC max< PCC >( PCC s1, PCC s2 ) {
return ( strcmp( s1, s2 ) > 0? s1 : s2 );
Выдрано из книги что указал в начале. В двух словах это перегрузка шаблона функции для конкретных типов.
Я так понял здесь описан случай по умолчанию применяется для Просто в угловых скобках указывается ЛЮБОЙ ТИП ДАННЫХ - от определённых пользователем до стандартных
Похожие вопросы
- Вопрос для тех кто знает точный ответ, язык C про функции все подробности вопроса внутри...
- шаблоны функций
- C++ шаблоны
- C++ Шаблоны с массивами
- C++ полифил функции substr
- с использованием шаблонов функций на языке С++ помогите пожалуйста
- Почему в C++ заголовки функций и код принято хранить в отдельных файлах?
- Алгоритмы стандартной библиотеки шаблонов. Вектора в C++.
- Функции в языке программирования C.
- C++ Указатели и функции.
template void Function< int >(int, int);
отличается от явной специализации:
template <> void Function< int >(int, int);
template <> void Function(int, int);