C++ Программирование в среде С++ Builder 5



             

Специализация шаблона функции - часть 2


}

// Вызывается для целочисленных аргументов // различающихся типов. long Max(long a, long b)

{

return Max<long>(a, b);

}

#pragma argsused int main(int argc, char* argv[])

{

int il = 11, i2 = 22;

float fl = 1.11, f2 = 22.2;

char str1[] = "First string.";

char str2[] = "Second string.";

char с = 33;

cout << "Max int: " << Max(il, i2) << endl;

cout<< "Max float: " “ Max(fl, f2) << endl;

cout << "Max element: "<< Max(strl, strlen(strl)) << endl;

cout << "Max string: " << Max(strl, str2) << endl;

cout << "Max(int,char): " << Max(i1, c) << endl;

return 0;

}

Последнее определение—Max (long, long) —требует некоторых пояснений. Эта специализированная функция вызывает явным образом функцию шаблона для сравнения двух аргументов фактического типа long. Но какой в этом смысл?

Если не определить такую функцию, компилятор вообще не сможет вызвать, например, Мах (int, char), как в последнем операторе вывода. (Подобные сравнения являются на самом деле “признаком дурного тона”.) Имеется только шаблон, два параметра которого имеют один и тот же тип, а как говорилось выше, компилятор использует шаблон только в том случае, если можно получить точное соответствие параметров типам аргументов в вызове. Однако благодаря определению специализированной функции компилятор может разрешить вызов, преобразовав char в long.

На рисунке показан результат работы программы.

Рис. 10.1 Программа Functemp




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