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

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

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

Автор: Philippe Sigaud
Переводчик: Striver
Дата выхода: 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 или кортежи, вылечили меня от этого впечатления. Я надеюсь, что этот документ поможет вам тоже.


Похожее:

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

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