Составители:
Рубрика:
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
AA_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
Страницы
- « первая
- ‹ предыдущая
- …
- 100
- 101
- 102
- 103
- 104
- …
- следующая ›
- последняя »