int i; // Здесь ошибка!
void swapargs(X &а, X &b)
{
X temp;
temp = a;
a = b;
b = temp;
}
Как отмечено в комментарии,
В
#include
using namespace std;
template
void myfunc(type1 x, type2 y)
{
cout << x << ' ' << у << '\n';
}
int main()
{
myfunc(10, "Привет");
myfunc(0.23, 10L);
return 0;
}
В этом примере при выполнении функции main(), когда компилятор генерирует конкретные экземпляры функции
Узелок на память.
Несмотря на то что обобщенная функция сама перегружается по мере необходимости, это можно делать и явным образом. Формально этот процесс называется
// Перегрузка шаблонной функции.
#include
using namespace std;
template
void swapargs(X &a, X &b)
{
X temp;
temp = a;
a = b;
b = temp;
cout << "Выполняется шаблонная функция swapargs.\n";
}
// Эта функция переопределяет обобщенную версию функции swapargs() для int-параметров.
void swapargs(int &а, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
cout << "Это int-специализация функции swapargs.\n";
}
int main()
{
int i=10, j =20;
double x=10.1, y=23.3;
char a='x', b='z';
cout << "Исходные значения i, j: " << i << ' '<< j << '\n';
cout << "Исходные значения x, у: " << x << ' '<< у << '\n';
cout << "Исходные значения a, b: " << a << ' '<< b << '\n';
swapargs(i, j); // Вызывается явно перегруженная функция swapargs().
swapargs(x, у); // Вызывается обобщенная функция swapargs().
swapargs(a, b); // Вызывается обобщенная функция swapargs().
cout << "После перестановки i, j: " << i << ' '<< j << '\n';
cout << "После перестановки x, у: " << x << ' '<< у << '\n';
cout << "После перестановки a, b: " << a << ' '<< b << '\n';
return 0;
}
При выполнении эта программа генерирует такие результаты.
Исходные значения i, j: 10 20
Исходные значения х, у: 10.1 23.3
Исходные значения a, b: х z
Это int-специализация функции swapargs.
Выполняется шаблонная функция swapargs.
Выполняется шаблонная функция swapargs.
После перестановки i, j: 20 10
После перестановки х, у: 23.3 10.1
После перестановки а, b: z х