По последним данным, на рынке продается по крайней мере 2 768 942 книги о С++, не говоря уже о всевозможных курсах, обучающих программах, журналах и семинарах с коктейлями. И все же в этом изобилии наблюдается удручающее однообразие.
Параметризованные функции объявляются точно так же - перед их объявлениями указывается формула template.... Синтаксис шаблона должен повторяться как при объявлении, так и при определении функции. Помните, шаблоны на самом деле являются макросами, поэтому они должны находиться в файлах .h. Если определение будет находиться в файле .срр, программа работать не будет (если только это не единственный файл .срр, в котором вызывается данная функция).
// Объявление функции
template <class Type>
Type* fn(Type* t);
// Определение ее реализации
template <class Type>
Type* fn(Type* t) {
// Тело функции, в котором имя Type
// используется в качестве параметра макроса
}
Foo* f = fn<Foo>(new Foo);
Определение генерируется компилятором при необходимости, то есть при вызове функции. На этот раз параметризовано имя функции, а не имя класса.
Просматривать полку книг о С++ в книжном магазине ничуть не интереснее, чем литературу по бухгалтерии. В сущности, все книги пересказывают одно и то же и отличаются разве что по весу и количеству цветов в диаграммах и таблицах.