Из описания "Thin templates" становится ясно, что шаблоны используются для тех же целей, что и в других языках программирования: для создания классов-коллекций, и обеспечения безопасности хранимых типов данных.
В то же самое время, использование шаблонов существенно увеличивает объем объектного кода, что является весьма нежелательным явлением в мобильных устройствах. Для снижения объемов объектного кода разработчики Symbian OS придумали идиому встраиваемых шаблонов.
Во-первых, для создания класса со встраиваемыми шаблонами нужен базовый класс, хранящий всю логику и код обработки данных. Базовый класс должен использовать параметры типа TAny, и по возможности содержать весь код обработки данных, так как наследуемые от него классы (как раз использующие шаблоны), будут выполнять лишь функцию внешних интерфейсов к полезному коду базового класса:
class CArrayFixBase ... { // объявление базового класса
...
IMPORT_C const TAny* At(TInt aIndex) const;
}
В свою очередь, наследующие классы получают возможность использовать шаблоны, и в то же время замещать логику своих методов полезным кодом базового класса:
class CArrayFix: public CArrayFixBase {
...
inline const T& At(TInt aIndex) const
{
return (*((const T *) CArrayFixBase::At(anIndex)));
}
При этом следует обратить внимание на тот факт, что все методы наследующего класса должны быть встраиваемыми, то есть объявленными через оператор inline. Только в этом случае для наследующего класса не будет создан избыточный объектный код. Таким образом, шаблон "встраивается" в базовый код через наследующий класс, и не позволяет расти объектному коду.
Конечно, словосочетание "тонкий шаблон" может указывать на некую экономичность используемого метода, однако для понятности изложения все же правильнее использовать термин "встраиваемый шаблон".