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

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

Шаблоны D: учебное пособие
Автор: Sigaud Philippe
Дата выхода: 2018
Издательство: Самиздат
Количество страниц: 170
Размер файла: 859,5 КБ
Тип файла: PDF
Добавил: zedchi
 Проверить на вирусы

Введение....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

Шаблоны являются центральной особенностью D, дающей вам мощные возможности генерации кода времени компиляции, которые сделают ваш код более чистым, более гибким, и даже более эффективным. Они везде используются в Phobos — стандартной библиотеке D — и, следовательно, любой пользователь D должен о них знать. Но, основанные на шаблонах C++, как и они, шаблоны D поначалу могут немного пугать. 

Документация веб-сайта D Programming Language является хорошим началом, хотя её описание шаблонов разбросано среди многих различных файлов, и (так как это справочник по языку) её материал не столько учит вас использованию шаблонов, сколько показывает вам их синтаксис и семантику. Этот документ стремится быть своего рода учебником по шаблонам D, чтобы показать начинающему D-программисту, чего можно достичь с их помощью. Когда я использовал C++, я не помню, чтобы когда-нибудь использовал шаблоны, кроме как в контейнерах, и считал, что я никогда не смогу понять код метапрограмм уровня Boost1, не говоря уже о его создании. Ну, нормальный синтаксис D для шаблонов и замечательные возможности, такие как, например, static if, alias или кортежи, вылечили меня от этого впечатления. Я надеюсь, что этот документ поможет вам тоже.


Похожее:

Список отзывов:

Нет отзывов к книге.