список шаблонов, 2,043 шаблонов для бесплатной загрузки
еженедельные планировщик шаблона
список задач проектирования
меню завтраков дизайн ресторана
еженедельные планировщик шаблона
кино плакат
прекрасный цветочный сделать список акварели
Рекламный всплывающий список «Хэллоуин»
контрольный список для выполнения списка задач
проверь регистрация список перечень логотип синего и регистрации
красивый бизнес концепции бренда проверь l список
красивый бизнес концепции бренда бизнес список план
проверь контрольный перечень из логотипа на синем опыт список
синий логотип для проверки регистрация список перечень регистрация
проверь регистрация список перечень регистрация бизнеса логотип им я
банковские бюджет деньги серый логотип и визитку список
f контрольный список логотипа дизайн вектор
разговор список почта твердых значок пан почтовый
красивый бизнес концепции бренда инженер наушники список
Шаблоны музыкальные символы Список воспроизведения элемент вектор
социальные медиа instagram баннер vol 1
Новый список Новый список Новый список Полное
разговор список голубой бизнес логотип и почту почтовый
контрольный список в письме логотип дизайн вектор
проверь контрольный перечень список задача сделать квартиру бизнес логотип шаблон
проверьте список логотип шаблон
Ручной обращается мультфильм розовый синий бизнес распространился корзина покупок список покупок набор покупок иллюстрации
проверь регистрация список перечень регистрация белый символ значок коло
проверить список регистрации листинг регистрации плоский цветной значок вектор
красивый бизнес концепции бренда проверить контрольный перечень список та
синий логотип шаблон для бизнеса проверь список задача время f
проверь список задача время пурпур бизнес логотип шаблон ноа todo
бизнес логотип шаблон для бизнеса список план планирование задача
пустой шаблон большой список лидеров
проверь список задача время сине желтый бизнес логотип шаблон todo
список задача текст плана на отдельные слова голубой логотип
кодирование название компании логотипа в кодекс сбор файлы список
категории проверь список перечень марк сине желтый бизнес логотип
список задач текст синий сплошной логотип с местом для слогана
категории проверь список перечень марк бизнес логотип символ значок
бизнес логотип кодекс кодирование сбор файлы список вертикальной p
логотип для проверки бизнеса регистрация список перечень регистрация ve
логотип для проверки бизнеса регистрация список перечень регистрация ve
банковские бюджет деньги синий логотип с места наброски список
проверь контрольный перечень буфер обмена квартиры бизнес логотип опыт список
проверь контрольный перечень список задача делать бизнес эмблема сине желтый
бизнес логотип для категорий проверь список перечень марк вертик
Розовый новый продукт список половину цены рекламный баннер
категории проверь список перечень марк плоский логотип templa бизнес
кодекс кодирование сбор файлы список логотип синего и оранжевого цветов
синий логотип кода кодирование сбор файлы список busines
список гостей шаблонов, 2,131 шаблонов для бесплатной загрузки
ретро музыку 80 участник кассету
минимализм флаер шаблон
летняя вечеринка
классическая поп дискотека
электро звук флаер шаблон
еженедельные планировщик шаблона
список задач проектирования
меню завтраков дизайн ресторана
еженедельные планировщик шаблона
пурпурный маленький
летом пляж закат флаер
электро дэнс флаер
электро дэнс концерте флаер
день рождения флаер шаблон
день рождения флаер
флаер поп диско
кино плакат
Голубые бизнес с высокоскоростной атмосферой vip
dj гость флаер шаблон
гость dj группа флаер
Рекламный всплывающий список «Хэллоуин»
прекрасный цветочный сделать список акварели
асимптотический бизнес стиль vip
электро будущих флаер шаблон
Черное золото роскошный vip приглашение
характер флаер шаблон
контрольный список для выполнения списка задач
Черное золото роскоши vip приглашение
Темно синий роскошный vip приглашение
электро хаус музыка флаер
Роскошный золотой vip приглашение
бизнес флаер
Простой коричневый роскошный золотой vip постер с приглашением
проверь регистрация список перечень логотип синего и регистрации
красивый бизнес концепции бренда проверь l список
синий логотип для проверки регистрация список перечень регистрация
банковские бюджет деньги серый логотип и визитку список
красивый бизнес концепции бренда бизнес список план
проверь контрольный перечень из логотипа на синем опыт список
проверь регистрация список перечень регистрация бизнеса логотип им я
f контрольный список логотипа дизайн вектор
разговор список почта твердых значок пан почтовый
Шаблоны музыкальные символы Список воспроизведения элемент вектор
красивый бизнес концепции бренда инженер наушники список
социальные медиа instagram баннер vol 1
разговор список голубой бизнес логотип и почту почтовый
Новый список Новый список Новый список Полное
контрольный список в письме логотип дизайн вектор
Коричневый роскошный золотой vip приглашение
проверь контрольный перечень список задача сделать квартиру бизнес логотип шаблон
Основы шаблонов С++: шаблоны функций / Habr
Дисклаймер: статья была начата еще в феврале, но, по зависящим от меня причинам, закончена не была. Тема очень обширна, поэтому публикуется в урезанном виде. Что не поместилось, будет рассмотрено позже.
Невозможно разбираться в современном С++, не зная, что такое шаблоны программирования. Данное свойство языка открывает широкие возможности оптимизации и повторного использования кода. В данной статье попробуем разобраться, что это такое и как это всё работает.
Механизм шаблонов в языке С++ позволяет решать проблему унификации алгоритма для различных типов: нет необходимости писать различные функции для целочисленных, действительных или пользовательских типов – достаточно составить обобщенный алгоритм, не зависящий от типа данных, основывающийся только на общих свойствах. Например, алгоритм сортировки может работать как с целыми числами, так и с объектами типа «автомобиль».
Существуют шаблоны функций и шаблоны классов.
Шаблоны функций -– это обобщенное описание поведения функций, которые могут вызываться для объектов разных типов. Другими словами, шаблон функции (шаблонная функция, обобщённая функция) представляет собой семейство разных функций (или описание алгоритма). По описанию шаблон функции похож на обычную функцию: разница в том, что некоторые элементы не определены (типы, константы) и являются параметризованными.
Шаблоны классов -– обобщенное описание пользовательского типа, в котором могут быть параметризованы атрибуты и операции типа. Представляют собой конструкции, по которым могут быть сгенерированы действительные классы путём подстановки вместо параметров конкретных аргументов.
Рассмотрим более подробно шаблоны функций.
Шаблоны функций
Как написать первую шаблонную функцию?
Рассмотрим случай определения минимального элемента из двух. В случае целых и действительных чисел придется написать 2 функции.
int _min(int a, int b){
if( a < b){
return a;
}
return b;
}
double _min(double a, double b){
if( a < b){
return a;
}
return b;
}
Можно, конечно, реализовать только одну функцию, с действительными параметрами, но для понимания шаблонов это будет вредным.Что произойдёт в случае компиляции приложения? Обе реализации функции попадут в бинарный код приложения, даже если они не используются (впрочем, сейчас компиляторы очень умные, умеют вырезать неиспользуемый код). А если необходимо добавить функцию, определяющую минимальную из 2 строк (сложно представить без уточнения, что есть минимальная строка)?!
В этом случае, если алгоритм является общим для типов, с которыми приходится работать, можно определить шаблон функции. Принцип, в общем случае, будет следующим:
- берётся реализация функции для какого-то типа;
- приписывается заголовок template<class Type> (или template<typename Type>), что означает, что в алгоритме используется какой-то абстрактный тип Type;
- в реализации функции имя типа заменяется на Type.
Для функции min получится следующее:
template<class Type>
Type _min(Type a, Type b){
if( a < b){
return a;
}
return b;
}
Самым интересным является тот факт, что пока нет вызова функции min, при компиляции она в бинарном коде не создается (не инстанцируется). А если объявить группу вызовов функции с переменными различных типов, то для каждого компилятор создаст свою реализацию на основе шаблона.
Вызов шаблонной функции, в общем, эквивалентен вызову обыкновенной функции. В этом случае компилятор определит, какой тип использовать вместо Type, на основании типа фактических параметров. Но если подставляемые параметры окажутся разных типов, то компилятор не сможет вывести (инстанцировать шаблон) реализацию шаблона. Так, в ниже следующем коде компилятор споткнётся на третьем вызове, так как не может определить, чему равен Type (подумайте, почему?):
#include <iostream>
template<class Type>
Type _min(Type a, Type b) {
if (a < b) {
return a;
}
return b;
}
int main(int argc, char** argv) {
std::cout << _min(1, 2) << std::endl;
std::cout << _min(3.1, 1.2) << std::endl;
std::cout << _min(5, 2.1) << std::endl; // oops!
return 0;
}
Решается эта проблема указанием конкретного типа при вызове функции.
#include <iostream>
template<class Type>
Type _min(Type a, Type b) {
if (a < b) {
return a;
}
return b;
}
int main(int argc, char** argv) {
std::cout << _min<double>(5, 2.1) << std::endl;
return 0;
}
Когда шаблонная функция (не) будет работать?
В принципе, можно понять, что компилятор просто подставляет нужный тип в шаблон. Но всегда ли получаемая функция будет работоспособна? Очевидно, что нет. Любой алгоритм может быть определен независимо от типа данных, но он обязательно пользуется свойствами этих данных. В случае с шаблонной функцией _min это требование определения оператора упорядочения (оператор
Перегрузка шаблона функции
Шаблоны функций также могут перегружаться. Обычно данная перегрузка выполняется при
template<class Type>
Type* _min(Type* a, Type* b){
if(*a < *b){
return a;
}
return b;
}
Частные случаи
В некоторых случаях шаблон функции является неэффективным или неправильным для определенного типа. В этом случае можно специализировать шаблон, — то есть написать реализацию для данного типа. Например, в случае со строками можно потребовать, чтобы функция сравнивала только количество символов. В случае специализации шаблона функции тип, для которого уточняется шаблон в параметре не указывается. Ниже приводится пример указанной специализации.
template<>
std::string _min(std::string a, std::string b){
if(a.size() < b.size()){
return a;
}
return b;
}
Специализация шаблона для конкретных типов делается опять же из соображения экономичности: если эта версия шаблона функции в коде не используется, то она не будет включена в бинарный код.
На будущее остаются множественные и целочисленные параметры. Естественным продолжением являются шаблоны классов, основы порождающего программирования, и устройство стандартной библиотеки С++. И куча примеров!
Бланки домашней канцелярии
С этой страницы можно скачать бланки для вашей «домашней канцелярии». Одни из них служат для размещения на домашней информационной доске, другие — для вставки в домашний органайзер-тетрадку, некоторые предназначены для личного планирования времени членов семьи.
- Чтобы перенести на бумагу ту периодически необходимую для разумного хозяйствования информацию, от которой хотелось бы освободить голову.
- Чтобы лучше распоряжаться временем, уходящим на домашние дела, и семейным временем в целом.
- Наконец, чтобы сделать домашние заботы заметными и понятными всем членам семьи.
Подробнее об использовании списков, планов и чек-листов читайте здесь.
А бланки — распечатывайте и пользуйтесь!
Бланки сделаны в формате word и могут быть легко отредактированы в соответствии с вашими индивидуальными потребностями.
Бланки для раздела о членах семьи
Личные данные, 2 x A5 (лист A4) | Личные данные,A5 | Личные данные,A4 |
Личные данные-оборот, 2 x A5 (лист A4) | Личные данные-оборот,A5 | Личные данные-оборот,A4 |
Родня, 2 x A5 (лист A4) | Родня, A5 | Родня, A4 |
Соседи, 2 x A5 (лист A4) | Соседи, A5 | Соседи, A4 |
Общие планы на год, 2 x A5 (лист A4) | Общие планы на год, A5 | Общие планы на год, A4 |
Предстоящие покупки, 2 x A5 (лист A4) | Предстоящие покупки, A5 | Предстоящие покупки, A4 |
Наш ребенок, 2 x A5 (лист A4) | Наш ребенок, A5 | Наш ребенок, A4 |
Наш ребенок, оборот, 2 x A5 (лист A4) | Наш ребенок, оборот, A5 | |
Врачебные предписания, 2 x A5 (лист A4) | Врачебные предписания, A5 | Врачебные предписания, A4 |
Врачебные предписания-оборот, 2 x A5 (лист A4) | Врачебные предписания-оборот, A5 | Врачебные предписания-оборот, A4 |
Бланки для раздела о полезной инфраструктуре
Окрестные заведения, ближайшие, 2 x A5 (лист A4) | Окрестные заведения, ближайшие, A5 | Окрестные заведения, ближайшие, A4 |
Окрестные заведения, дежурные, 2 x A5 (лист A4) | Окрестные заведения, дежурные, A5 | Окрестные заведения, дежурные, A4 |
Окрестные заведения, чистый лист, 2 x A5 (лист A4) | Окрестные заведения, чистый лист, A5 | Окрестные заведения, чистый лист, A4 |
Другие важные заведения, 2 x A5 (лист A4) | Другие важные заведения, A5 | Другие важные заведения, A4 |
Телефоны первой необходимости, со списком 2 x A5 (лист A4) | Телефоны первой необходимости, со списком, A5 | Телефоны первой необходимости, со списком, A4 |
Телефоны первой необходимости, чистый лист, 2 x A5 (лист A4) | Телефоны первой необходимости, чистый лист, A5 | Телефоны первой необходимости, чистый лист, A4 |
Специалисты, 2 x A5 (лист A4) | Специалисты, A5 | Специалисты, A4 |
Бланки для списков вещей, продуктов и другого домашнего имущества
Постоянные запасы: еда, 2 x A5 (лист A4) | Постоянные запасы: еда, A5 | Постоянные запасы: еда, A4 |
Постоянные запасы: бытовая химия, 2 x A5 (лист A4) | Постоянные запасы: бытовая химия, A5 | Постоянные запасы: бытовая химия, A4 |
Расходники к домашней технике, список, 2 x A5 (лист A4) | Расходники к домашней технике, список, A5 | Расходники к домашней технике, список, A4 |
Расходники к домашней технике, таблица, 2 x A5 (лист A4) | Расходники к домашней технике, таблица, A5 | Расходники к домашней технике, таблица, A4 |
Что лежит в дальних ящиках? 2 x A5 (лист A4) | Что лежит в дальних ящиках? A5 | Что лежит в дальних ящиках? A4 |
Вещи в дорогу: отпуск, 2 x A5 (лист A4) | Вещи в дорогу: отпуск, A5 | Вещи в дорогу: отпуск, A4 |
Бланки для мониторинга различных областей жизни
Расход воды, 2 x A5 (лист A4) | Расход воды, A5 | Расход воды, A4 |
Расход и оплата электроэнергии, 2 x A5 (лист A4) | Расход и оплата электроэнергии, A5 | Расход и оплата электроэнергии, A4 |
Мониторинг магазина, лицевая часть, 2 x A5 (лист A4) | Мониторинг магазина, лицевая часть, A5 | Мониторинг магазина, лицевая часть, A4 |
Мониторнинг магазина, оборот, 2 x A5 (лист A4) | Мониторнинг магазина, оборот,A5 | Мониторнинг магазина, оборот, A4 |
Бланки для планирования домашних проектов и описания порядка действий
Порядок действий, 2 x A5 (лист A4) | Порядок действий, A5 | Порядок действий, A4 |
Проект: планируемый результат и бюджет, 2 x A5 (лист A4) | Проект: планируемый результат и бюджет, A5 | Проект: планируемый результат и бюджет, A4 |
Проект: что нужно, 2 x A5 (лист A4) | Проект: что нужно, A5 | Проект: что нужно, A4 |
Проект: что сделать, 2 x A5 (лист A4) | Проект: что сделать, A5 | Проект: что сделать, A4 |
Проект: что купить, 2 x A5 (лист A4) | Проект: что купить, A5 | Проект: что купить, A4 |
Проект: люди, 2 x A5 (лист A4) | Проект: люди, A5 | Проект: люди, A4 |
Проект: идеи и наблюдения, 2 x A5 (лист A4) | Проект: идеи и наблюдения, A5 | Проект: идеи и наблюдения, A4 |
Событие: что нужно, 2 x A5 (лист A4) | Событие: что нужно, A5 | Событие: что нужно, A4 |
Бланки для раздела «Домашний менеджмент», об организации рутинных домашних работ
График домашних работ, 2 x A5 (лист A4) | График домашних работ, A5 | График домашних работ, A4 |
Одна работа в день, 2 x A5 (лист A4) | Одна работа в день, A5 | Одна работа в день, A4 |
Недельное расписание, 2 x A5 (лист A4) | Недельное расписание, A5 | Недельное расписание, A4 |
Обязательные утренние дела, 2 x A5 (лист A4) | Обязательные утренние дела, A5 | Обязательные утренние дела, A4 |
Обязательные вечерние дела, 2 x A5 (лист A4) | Обязательные вечерние дела, A5 | Обязательные вечерние дела, A4 |
Домашние заботы: ежедневно, 2 x A5 (лист A4) | Домашние заботы: ежедневно, A5 | Домашние заботы: ежедневно, A4 |
Домашние заботы: раз в неделю и чаще, 2 x A5 (лист A4) | Домашние заботы: раз в неделю и чаще, A5 | Домашние заботы: раз в неделю и чаще, A4 |
Домашние заботы: раз в месяц и чаще, 2 x A5 (лист A4) | Домашние заботы: раз в месяц и чаще, A5 | Домашние заботы: раз в месяц и чаще,A4 |
Домашние заботы: реже чем раз в месяц, 2 x A5 (лист A4) | Домашние заботы: реже чем раз в месяц, A5 | Домашние заботы: реже чем раз в месяц, A4 |
+ 10 минут для чистоты, 2 x A5 (лист A4) | + 10 минут для чистоты, A5 | + 10 минут для чистоты, A4 |
Дежурство, 2 x A5 (лист A4) | Дежурство, A5 | Дежурство, A4 |
Бланки для персонального планирования дел
«Автофокус», 2 x A5 (лист A4) | «Автофокус»,A5 | «Автофокус»,A4 |
«4 области», 2 x A5 (лист A4) | «4 облсти»,A5 | «4 области»,A4 |
45 и 15 минут (по Яне Франк), вся неделя, 2 x A5 (лист A4) | 45 и 15 минут (по Яне Франк) A5, понедельник-среда | 45 и 15 минут (по Яне Франк) A5, четверг-суббота |
45 и 15 минут (по Яне Франк) A4, понедельник-среда | 45 и 15 минут (по Яне Франк) A4, четверг-суббота | |
Жесткие встречи и гибкие задачи,слоны и лягушки (по Архангельскому), 2 x A5 (лист A4) | Жесткие встречи и гибкие задачи,слоны и лягушки (по Архангельскому), A5 | Жесткие встречи и гибкие задачи,слоны и лягушки (по Архангельскому), A4 |
Ежедневные дела, 2 x A5 (лист A4) | Ежедневные дела, A5 | Ежедневные дела, A4 |
Бланк планирования меню (word, формат A4).
Бланк планирования меню (word, формат A5 (2 на листе A4), для органайзера).
Бланк мониторинга запасов бытовой химии (2хА5, вариант с таблицей).
Бланк мониторинга запасов бытовой химии (2хА5, вариант с чекбоксами).
Разметка для шкафчика с детской одеждой (jpg, цветные рисунки для разрезания на листе A4).