Шаблоны. Виды шаблонов. Применение шаблонов и создание документа на основе шаблона

Хотя стандарты шаблонов опубликованы уже давно, они все еще распространены недостаточно широко. Конечно, трудно использовать нечто, не поддерживаемое вашим компилятором, - наверное, это первая причина, по которой большинство программистов C++ не умеет работать с шаблонами. К счастью, сейчас все основные компиляторы уже вошли в двадцатый век, так что эта проблема уже отпала. Остается лишь понять, что такое шаблон, как обойти все синтаксические ловушки, но прежде всего - для чего он все-таки нужен. Эта глава не ограничивается обзором синтаксиса. В ней также рассматриваются основы безопасности типов в C++, причем особое внимание уделяется шаблонам.

Что такое шаблоны и зачем они нужны?

Интерфейс простого класса-коллекции (на примере связанного списка) выглядит так:

class ListNode { private:

ListNode* next; void* data;

ListNode(void* d, ListNode* n = NULL) : next(n), data(d) {} ~ListNode() { delete next; }

void* Data() { return data; } ListNode* Next() { return next; }

Заметили что-нибудь особенное?

Проблемы

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

for (ListNode* n = listHead; n != NULL; n = n->Next()) f((Foo*)n->Data());

Иначе говоря, вам придется постоянно приводить void* к конкретному типу Но как убедиться в том, что полученный указатель действительно имеет типFoo* ? Здесь придется рассчитывать только на себя, потому что компилятор со словами «Надеюсь, ты знаешь, что делаешь» умывает руки. Допустим, вы уверены, что ваше использование класса надежно по отношению к типам. Но можно ли гарантировать, что другой программист не выкинет какую-нибудь глупость и не занесет в коллекцию объект другого типа? Если вы свято верите в это, я рекомендую держаться подальше от рискованных инвестиций и вложить деньги в правительственные бумаги, вряд ли вам повезет в этой жизни.

Вторая проблема заключается в том, что элементы списка не знают, на какой тип они указывают. Предположим, вам хочется, чтобы деструктор списка удалял не только сами узлы, но и данные, на которые они ссылаются. Нельзя передать оператору delete указательvoid* и надеяться, что он сам выберет нужный деструктор.

Обходные решения

Одно из возможных решений - потребовать, чтобы все объекты вашей коллекции происходили от общего предка. В этом случае void* можно будет заменить указателем на базовый класс, создавая хотя бы видимость порядка. Если деструктор базового класса является виртуальным, по крайней мере мы сможем переписать деструкторListNode так, чтобы при самоубийстве он уничтожал и содержимое списка. Но если этот базовый класс имеет производные классы, вы наверняка вернетесь к необходимости выполнения ненадежных операций приведения к этим производным типам.

Другое обходное решение - создать список, рассчитанный на конкретный тип. Скажем, для ведения списка объектов класса Foo создается класс-коллекция ListOfFoos . В этом случае вам не придется выполнять приведения типов, еслиFoo не имеет производных классов. Но стоит ли плодить классыдвойники, которые отличаются только типами, с которыми они работают? Конечно, вырезание и вставка в текстовых редакторах - замечательная вещь, а сценарии обработки текстов помогают быстро размножить код. Но если вам потребуется изменить представление всех этих списков, дело неизбежно кончится масштабной головной болью.

В прошлом подобные проблемы часто решались с помощью макросов #define :

#define ListNode(Type) \ class ListNode##Type { \ private: \

ListNode##Type* next; \ Type* data; \

ListNode##Type(Type* d, ListNode* n = NULL) : next(n), data(d) {} \ ~ListNode() { delete next; } \

void* Data() { return data; } \ ListNode* Next() { return next; } \

Если вы нечаянно забудете поставить знак \ , компилятор разразится громкими негодующими воплями, но при должной осторожности эта методика работает. Символы## означают конкатенацию. Конструкция становится еще уродливее, но с этим приходится мириться - вы должны обеспечить уникальность имен типов коллекций. Такая методика обладает многочисленными недостатками. Если функции класса не являются подставляемыми (inline), вам придется создавать для них дополнительные макросы и следить, чтобы они были реализованы в одном модуле компиляции. У некоторых компиляторов возникают проблемы со слишком длинными макросами. Директивы#define не могут быть вложенными, поэтому рекурсивные, безопасные по отношению к типам структуры данных отпадают. Хуже всего, что при обнаружении ошибки в макросе отладчик складывает руки и сообщает, что где-то в макросе допущена ошибка, но не указывает конкретного номера строки.

Шаблоны - усовершенствованные макросы

На сцену выходит механизм шаблонов - усовершенствованный макропроцессор для директив #define . Шаблоны представляют собой ничто иное, как макросы без всех перечисленных ограничений. Они могут быть вложенными. Вам не придется беспокоиться о дублировании их функций. Большинство отладчиков C++ при возникновении ошибки правильно указывает строку шаблона. Размер шаблона не вызовет никаких проблем. Наконец, вам не придется уродовать свою прекрасную программу закорючками вроде\ и## .

- (нем. schablon, от фр. chantilion образец). Вырезной образец узора, по которому рисуют, вырезывают или вылепляют архитектурные украшения и проч. работы. Словарь иностранных слов, вошедших в состав русского языка. Чудинов А.Н., 1910. ШАБЛОН 1)… … Словарь иностранных слов русского языка

См. привычка... Словарь русских синонимов и сходных по смыслу выражений. под. ред. Н. Абрамова, М.: Русские словари, 1999. шаблон образец, трафарет, модель, маска, лекало, штамп, стандарт; обычай, привычка; трюизм, половой акт, казенщина, общее… … Словарь синонимов

шаблон - а, м. échantillon m. > гол. schampelioen> нем. Schablone образец. 1. Приспособление в виде лекала, патрона и т. д., по которому изготовляют одинаковые изделия. БАС 1. Деки <скрипок> вырезываются из толстой доски по шаблону. Куст. пром … Исторический словарь галлицизмов русского языка

Муж., франц. трафаретка, патрон, лекало или кружало: вырезной образец узора и вообще гнутых обводов. Шаблончик на карниз. Шаблон, для кладки свода, для шахтной или иной печи. Отливка вещей по шаблону. Шаблонный чертеж, лекальный, во всю величину… … Толковый словарь Даля

В информатике формализованный кадр изображения, выводимый на экран дисплея и содержащий тексты запросов к пользователю и специальные поля, предназначенные для занесения туда ответов пользователя (текстов или чисел). См. также: Диалоговые режимы… … Финансовый словарь

шаблон - ШАБЛОН, а, м. Половой акт в традиционной позе. шаблон гнать … Словарь русского арго

шаблон - ШАБЛОН, стандарт, трафарет, штамп … Словарь-тезаурус синонимов русской речи

- (от нем. Schablone образец модель),..1) пластина с вырезами, очертания которых соответствуют контуру изделия и т. п2)] Чертеж детали (архитектурной, строительной), выполненный в натуральную величину3) В переносном смысле образец, штамп, которому… … Большой Энциклопедический словарь

- (лекало), форма (матрица) или образец для изготовления определенного количества точных копий объекта. Обычно вырезается из тонких пластин (листов) металла, дерева или бумаги … Научно-технический энциклопедический словарь

ШАБЛОН, шаблона, муж. (нем. Schablone). 1. Пластина с профилем, контуром предмета или иное приспособление, являющееся образцом при изготовлении изделий (тех.). 2. перен. Готовый образец, которому слепо подражают; избитая форма выражения мысли… … Толковый словарь Ушакова

ШАБЛОН, а, муж. 1. Пластина с вырезами, по контуру к рых изготовляются чертежи или какие н. изделия, лекало (во 2 знач.) (спец.). Чертить, кроить по шаблону. 2. перен. Общеизвестный, избитый образец, трафарет (в 3 знач.), к рому подражают.… … Толковый словарь Ожегова

Что такое шаблоны и зачем они нужны

Что такое шаблон в языке программирования? Можно сказать, что шаблон - это текст с переменными внутри него. При обработке шаблона происходит замена переменных на их значения.

В одной из лекций мы уже рассматривали пример шаблона . Это был шаблон для отображения документов. Пользователь создавал строку текста, размеченного с помощью html-тегов, и вставлял в нее специальные метасимволы (вида ), которые наша программа впоследствии заменяла на значения соответствующих элементов. Для чего нам был нужен такой шаблон ? Чтобы, например, можно было изменить стиль отображения документа, не меняя кода программы.

Наиболее распространенный ответ на вопрос, зачем нужны шаблоны , звучит примерно так: шаблоны нужны для того, чтобы отделить логику работы приложения от способа представления данных, т. е. от дизайна.

Приведенный пример шаблона - один из самых простых. Для его обработки используется только функция подстановки str_replace() . Чаще всего для того, чтобы работать с шаблонами , создают библиотеки классов. В принципе создавать свою библиотеку не обязательно, поскольку существует множество свободно распространяемых библиотек шаблонов , над функциональностью которых трудятся большие коллективы разработчиков, стараясь сделать их универсальными, мощными и быстрыми. Некоторые из таких библиотек мы и рассмотрим. Но для начала сформулируем задачу, на примере решения которой будем демонстрировать использование различных шаблонов .

Итак, задача:

Требуется сгенерировать web-страницу со списком статей, имеющихся в базе данных. Для простоты считаем, что статья имеет название title , автора author , краткое содержание abstract и полное содержание fulltext , которое представлено либо в виде текста в базе данных, либо в виде ссылки на файл. Список должен быть организован так, чтобы при щелчке мышью на названии статьи ее полное содержание появлялось в новом окне.

ШАБЛОН, -а, м. 1. Пластина с вырезами, по контуру к-рых изготовляются чертежи или какие-н. изделия, лекало (во 2 знач.) (спец.). Чертить, кроить по шаблону. 2. перен. Общеизвестный, избитый образец, трафарет (в 3 знач.), к-рому подражают. Сочинять по шаблону. 3. Инструмент для измерения каких-н. размеров, расстояний (спец.). Резьбовой ш. Радиусный ш. II прил. шаблонный, -ая. -ое (к 1 и 3 знач.).

ШАБЛОН - книги

…здание и шаблон подойдет для тех, кто хочет собственноручно собрать высоко конверсионный лендинг и делать на нем хорошие продажи. Этот шаблон был разработан профессиональными маркетологами и протестир…

… общеупотребительные фразы (шаблоны), которые чаще всего используются в разговорной речи и могут быть использованы в самых различных ситуациях. Представленные шаблоны рекомендуются для запоминания все…

… Шаблоны проектирования веб-приложений, сходные по принципам с шаблонами проектирования веб-сайтов и программного обеспечения, предлагают множество эффективных решений. В книге приведены шаблоны проект…

… Шаблоны представляют собой одну из наиболее сильных сторон C++, но они все еще остаются недостаточно используемыми, а зачастую и неверно понимаемыми, несмотря на постоянно растущий уровень как языка C…

… направления, по которым необходимо создавать шаблоны с использованием инфраструктурных элементов. На оперативном уровне управления использование шаблонов позволит быстро создавать модели, легко читат…

ШАБЛОН - слова близкие по значению

  • ШАБЛОННЫЙ , -ая, -ое; -онен, -бнна. 1. см. шаблон. 2. перен. Избитый, лишенный оригинальности и выразительности, трафаретный (во...
  • ЛЕКАЛО , -а, ср. 1. Чертежный инструмент для вычерчивания кривых линий. 2. Шаблон, модель, применяемые при изготовлении изделий...
  • СТЕРЕОТИПНЫЙ , -ое; -пен, -пна. 1. см. стереотип. 2. Повторяющийся в неизменном виде, шаблонный, стандартный (во 2 знач.) (книжн.)...
  • ТРАФАРЕТНЫЙ , -ая, -ое; -тен, -тна. 1. см. трафарет. 2. Являющийся трафаретом (в 3 знач.), избитый, шаблонный. Трафаретные...
  • КЛИШЕ , нескл., ср. 1. Рельефное изображение на металле, дереве, пластмассе или линолеуме для полиграфического...
  • РЕМЕСЛЕННЫЙ , -ая, -ое. 1. см. ремесло. 2. Шаблонный, не творческий. Рисунок сделан ремесленно (нареч.). 3. ремесленное училище - 1) в...
  • СТАНДАРТНЫЙ , -ая, -ое; -тен, -тна. 1. см. стандарт. 2. Удовлетворяющий, соответствующий стандарту (в 1 знач.). Стандартные коттеджи. 3....

Сейчас мы обсудим вопрос о том, что такое шаблон. Актуальность темы обусловлена повсеместным использованием данных форм, однако на самом деле знаем мы о них не так уж много, сейчас постараемся узнать подробнее об этом понятии.

Что такое шаблон в документации?

В документации шаблон - это такая пустая форма документа с инструкциями о правильности заполнения полей. Может быть и вариант шаблона - как форма документа с правильно заполненными полями.

Применение таких шаблонов ограничено только бухгалтерией и кадровым делопроизводством. Пример самых обыкновенных шаблонов в документации - это анкета или шаблонов в данной области, несомненно - облегчение работы отдела кадров и ускорение процедуры заполнения документов для граждан.

Техника

Поговорим о том, что такое шаблон в технике. Это пластина с вырезами. По контуру шаблонов изготавливаются различные чертежи и изделия. Они помогают рабочим ускорять процесс деятельности, так как по однажды сделанному образцу ведется производство других.

Поведение

Нужно разобраться с шаблон поведения, ведь существует и такое понятие. В психологии шаблонами называют реакции либо действия субъектов на внешние раздражители. Шаблонные действия - обычно обдуманные. Очень простой пример шаблона - на вопрос "Как дела?" отвечать "Нормально". Шаблоны вырабатываются на протяжении всей жизни и могут меняться.

Что такое шаблон поиска? Это способ описания поискового запроса с использованием различных символов.

Фотошоп

Фотошоп-шаблоны - это фотографии, которые являются образцом того, что можно сделать с помощью фотошопа. По таким шаблонам можно учиться пользоваться фотошоп-программами, тем самым повышая навыки фоторедактирования. Они прилагаются фактически к каждой программе. С помощью шаблонов можно быстро редактировать фотографию, тратя минимум времени.

Также фото-шаблоны помогают редактировать фотографии людям с плохой фантазией, так как представляют уникальные идеи для фоторедактирования.

Какие бывают шаблоны для Powerpoint

Шаблоны для Powerpoint - это фундамент проекта слайда или определенной группы слайдов, сохраняющиеся в виде POTX-файла.

Обычно шаблон в Powerpoint служит для быстрых презентаций, где основная цель -передача информации. Шаблоны облегчают жизнь человека. Если перефразировать, шаблон - это образец, то, на что мы ориентируемся.

В современном высокотехнологичном мире шаблоны широко распространены. Как именно они помогают в современном мире? Дело в том, что в век компьютерной технологии нет времени объяснять каждому пользователю, как пользоваться той или иной программой или прибором. Для этого, собственно, и созданы шаблоны. Они являются своеобразными инструкциями для "чайников". Существует масса примеров:

  1. Шаблоны деталей для учащихся в профессионально-технических училищах.
  2. Шаблоны документов для заполнения специально для людей, редко имеющих дело с документацией.
  3. Шаблоны дипломных, курсовых работ для студентов.
  4. Шаблоны фотографий с различными позами людей - для начинающих фотографов.
  5. Шаблоны плакатов для дизайнеров.

И это далеко не все существующие в мире шаблоны. Можно легко сказать, что шаблоны - это неодушевленные инструкторы, основная ценность которых заключается в быстром обучении различным навыкам людей. Один шаблон может послужить источником информации для миллионов людей.

Шаблоны создаются людьми для людей. Основная цель их предельно ясна - это как можно скорее обучить человека навыкам, ускорить работу в различных областях (техника, компьютерные технологии). Представить современный мир без шаблонов невозможно, ведь все пришлось бы объяснять и делать снова и снова. Придумав шаблоны, люди значительно упростили свою задачу в обучении будущих поколений специалистов.