Другие языки программирования и технологии

C++. Шаблоны функций

Чем явное создание экземпляра:
template void Function< int >(int, int);
отличается от явной специализации:
template <> void Function< int >(int, int);
template <> void Function(int, int);
Примеры из 6го издания Стивена Праты.
Думал-думал, не придумал; пытался гуглить =)
Умид Нардинов
Умид Нардинов
9 566
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 );

Выдрано из книги что указал в начале. В двух словах это перегрузка шаблона функции для конкретных типов.
Роман Большаков
Роман Большаков
15 408
Лучший ответ
Умид Нардинов и то и другое является перегрузкой шаблона! Вопрос: в чём отличие?! Нигде адекватного ответа нет.
Умид Нардинов Чем явное создание экземпляра:
template void Function< int >(int, int);
отличается от явной специализации:
template <> void Function< int >(int, int);
template <> void Function(int, int);
Умид Нардинов Сайт нормуль, добавлю в коллекцию)
Я так понял здесь описан случай по умолчанию применяется для Просто в угловых скобках указывается ЛЮБОЙ ТИП ДАННЫХ - от определённых пользователем до стандартных
АЛ
Алексей Л
21 700