Программирование на языке высокого уровня. Марапулец Ю.В. - 102 стр.

UptoLike

Составители: 

A <int> A_int;
A <double> A_double;
A <day> A_day;
B <char, 128> but;
B <a, 100> st;
При использовании параметров шаблона по умолчанию список аргументов может
оказаться пустым, при этом угловые скобки опускать нельзя:
template<class Т = char> class Str;
Str<>* p;
Если параметром шаблона является шаблон, имеющий специализацию, она учиты-
вается при инстанцировании:
template<class T> class A
{ // Исходный шаблон
int х;
};
template<class T> class A<T*>
{ // Специализация шаблона
long х;
};
template<template<class U> class V> class C
{
V<int> y;
V<int*> z;
};
...
C<A> с;
В этом примере V<int> внутри С
<А> использует исходный шаблон, поэтому с.у.х
имеет тип int, a V<int*> использует специализацию шаблона, поэтому с.z.х имеет тип
long.
На месте формальных параметров, являющихся переменными целого типа, должны
стоять константные выражения. После создания объектов с помощью шаблона с ними
можно работать так же, как с объектами обычных классов, например:
for (int i = 1; i<10; i++)
A_double.add(i * 0.08);
A_double.print();
for (int i = 1; i<10; i++)
A_day.add(i);
A_day.print();
strcpy(buf, "Cообщение");
cout << buf << endl;
Для упрощения использования шаблонов классов можно применить переименова-
ние типов с помощью typedef:
typedef A <double> Adbl;
Adbl A double;
102
A  A_int;
A  A_double;
A  A_day;
B  but;
B  st;

     При использовании параметров шаблона по умолчанию список аргументов может
оказаться пустым, при этом угловые скобки опускать нельзя:

template class Str;
Str<>* p;

     Если параметром шаблона является шаблон, имеющий специализацию, она учиты-
вается при инстанцировании:

template class A
{      // Исходный шаблон
     int х;
};
template class A
{ // Специализация шаблона
     long х;
};
template class V> class C
{
     V y;
     V z;
};
     ...
C с;

      В этом примере V внутри С<А> использует исходный шаблон, поэтому с.у.х
имеет тип int, a V использует специализацию шаблона, поэтому с.z.х имеет тип
long.
      На месте формальных параметров, являющихся переменными целого типа, должны
стоять константные выражения. После создания объектов с помощью шаблона с ними
можно работать так же, как с объектами обычных классов, например:

for (int i = 1; i<10; i++)
       A_double.add(i * 0.08);
A_double.print();
for (int i = 1; i<10; i++)
       A_day.add(i);
A_day.print();
strcpy(buf, "Cообщение");
cout << buf << endl;

     Для упрощения использования шаблонов классов можно применить переименова-
ние типов с помощью typedef:

typedef A  Adbl;
Adbl A double;

                                              102