Шаблоны D: учебное пособие

Оглавление⌄
Введение....5 Что находится в этом документе....5 Соглашения....5 Как получить этот документ....7 Благодарности....7 Основы....8 Почему Шаблоны?....8 Что такое Шаблон?....10 Объявления Шаблонов....11 Создание экземпляра Шаблона....14 Синтаксис....14 Шаблоны как Аргументы шаблона....15 Выбор среди объявлений....15 Результат создания экземпляра....15 Строительные блоки Шаблона....17 Одноимённый (Eponymous) Трюк....17 Внутренний псевдоним....18 static if....19 Специализации Шаблонов....24 Значения по-умолчанию....26 Шаблоны функций....27 Синтаксис....27 auto return....28 IFTI....28 Пример: Сглаженные массивы и диапазоны....29 Шаблоны анонимных функций....30 Замыкания — Объекты для бедных....31 Function Overloading....32 Классы памяти....32 Свойства выводятся автоматически....33 Предусловия in и out....34 Изменение функций....34 Шаблоны структур....36 Синтаксис....36 Фабричные функции....37 Даём доступ ко внутренним параметрам....37 Шаблонизированные методы....38 Шаблоны конструкторов....42 Внутренние структуры....43 Шаблон параметров This....44 Пример: a Concat / Flatten Range....45 Шаблоны классов....48 Синтаксис....48 Шаблоны методов....49 Условие invariant....49 Внутренние классы....50 Анонимные классы....50 Параметризованные базовые классы....50 Добавление функциональности через наследование....51 Странно рекурсивный шаблон....53 Пример: Автоматическая динамическая диспетчеризация....53 Другие шаблоны?....56 Шаблоны интерфейсов....56 Шаблоны объединений....56 Шаблоны Перечислений?....56 Некоторые более сложные вопросы....58 Ограничения....58 Синтаксис....58 Использование ограничений....59 Пределы ограничений....60 Ограничения, Специализации и static if....61 Шаблоны-предикаты....62 Проверка для члена....62 Проверка для операций....62 Завершение выравнивания диапазонов (Flatten)....63 Кортеж параметров Шаблона....64 Определение и Основные Свойства....64 Tuple, tuple, T... и .tupleof....66 Тип кортежей....67 Перегрузка операторов....73 Синтаксис....73 Шаблоны Mixin....75 Синтаксис....75 Примешивание кода....76 Пример Mixin: Подписчик и Стек....77 opDispatch....81 Синтаксис....81 Getters и Setters....82 Обёртки и Подтипы: Расширение Типов....83 Обёртывающие Шаблоны....83 alias this: Прозрачные типы....83 Библиотека Typedef....86 Типы как информация....88 Литералы, задаваемые пользователем....88 Кодирование информации с типами....88 Шаблоны на шаблонах....90 Шаблоны на пути вниз....90 Двухступенчатые шаблоны функций....91 Кортежи с именованными полями....92 __FILE__ и __LINE__....94 Вокруг Шаблонов: Другие инструменты времени компиляции....97 Строки Mixin....97 Синтаксис....97 Примешивание кода, с использованием шаблонов....97 Пределы....100 Вычисление функции времени компиляции....100 Вычисление во время компиляции....100 __ctfe....100 Шаблоны и CTFE....101 Шаблоны с CTFE и Строками Mixin, ох!....101 Простое заполнение строк....102 Пример: расширение std.functional.binaryFun....103 Сортирующие сети....104 __traits (Признаки)....108 Да/Нет вопросы с __traits....108 identifier....109 getMember....110 allMembers....110 derivedMembers....113 getOverloads....113 Получение всех членов, даже перегруженных....114 Тестирование Реализации интерфейса....117 getVirtualFunctions....118 parent (родитель)....118 Локальная область видимости имени....119 Примеры....122 Превращения типов....122 Отображение, фильтрация и свёртка Типов....122 Сканирование типов, Чередование типов....131 Комментирование типов....132 Кортежи как последовательности....134 Отображение на кортежах....134 Фильтрация кортежей....135 Веселье с функциями....136 Определение количества аргументов функции....136 Мемоизация функции....137 Каррирование функции....141 Соседские функции....142 Реляционная алгебра....144 Порождение событий....147 Поля....151 Расширение enum....151 Статический switch....152 Общие структуры....153 Поглощение....153 Полиморфные ассоциативные списки....154 Полиморфное дерево....155 Шаблоны выражений....156 Статически-проверенный Writeln....157 Расширение класса....162 Приложения....163 Выражение is....163 Общий синтаксис....163 is(Type)....163 is(Type : AnotherType) и is(Type == AnotherType)....164 Специализации типов....167 Ресурсы и дополнительная литература....168 Шаблоны D....168 Метапрограммирование D....170
Описание
В этом материале разберём тему: шаблоны.
Они везде используются в Phobos — стандартной библиотеке D — и, следовательно, любой юзер D должен о них знать. Шаблоны являются центральной особенностью D, дающей вам мощные возможности генерации кода времени компиляции, которые сделают ваш код более чистым, более гибким, и даже более эффективным. Но, основанные на шаблонах C++, как и они, шаблоны D поначалу могут немного пугать.
Этот документ стремится быть своего рода учебником по шаблонам D, чтобы показать начинающему D-программисту, чего можно достичь с их помощью. Документация веб-сайта D Programming Language является хорошим началом, хотя её описание шаблонов разбросано среди многих различных файлов, и (так как это справочник по языку) её материал не столько учит вас использованию шаблонов, сколько показывает вам их синтаксис и семантику. Когда я использовал C++, я не помню, чтобы когда-нибудь использовал шаблоны, кроме как в контейнерах, и считал, что я никогда не смогу понять код метапрограмм уровня Boost1, не говоря уже о его создании. Я надеюсь, что этот документ поможет вам тоже. Ну, нормальный синтаксис D для шаблонов и замечательные возможности, такие как, например, static if, alias или кортежи, вылечили меня от этого впечатления.
Если материал оказался полезен — сохраните страницу.
Поделиться
Частые вопросы
Можно ли скачать «Шаблоны D: учебное пособие» бесплатно?
Да, «Шаблоны D: учебное пособие» доступна для бесплатного скачивания на нашем сайте в формате PDF. Ссылка на файл находится на этой странице.
В каком формате и какого размера файл?
Книга предоставляется в формате PDF, размер файла 859,5 КБ.
Кто автор и когда вышла книга?
автор — Sigaud Philippe, издательство Самиздат, год выпуска 2018, 170 страниц.
О чём книга «Шаблоны D: учебное пособие»?
Шаблоны являются центральной особенностью D, дающей вам мощные возможности генерации кода времени компиляции, которые сделают ваш код более чистым, более гибким, и даже более эффективным.