: void a() { t.f(): } void b()

Автор admin Среда, 20 мая 2009 11:32

: void a() { t.f(): } void b() { t.g(): } }: int mainO { Z zx: zx.aO: // Код Z::b() не генерируется Z zy: zy.bO: // Код Z::a() не генерируется } III:- Хотя шаблон Z вроде бы использует обе функции шаблона Т (f() и д()), программа успешно компилируется, а это означает, что код Z::a() генерируется только при явном вызове этой функции для zx (если бы при этом также генерировался код Z::b(), то компилятор выдал бы сообщение об ошибке вызова несуществующей функции Х::д()). Аналогично, вызов zy.b() не генерирует Z::a(). Следовательно, шаблон Z может использоваться для обоих классов (X и Y). Если бы все функции класса генерировались непосредственно при специализации, это бы существенно ограничило возможности применения многих шаблонов. Специализация шаблонов 215 Допустим, у нас имеется шаблонный контейнер Stack, и в программе используются специализации int, int* и char*. В результате три версии кода Stack будут сгенерированы компилятором и скомпонованы с вашей программой. Как отмечалось ранее, шаблоны нужны прежде всего для того, чтобы избежать ручного дублирования кода; однако код все р


Комментарии закрыты.