Re[5]: Метапрограммирование в примерах
От: Evgeny.Panasyuk Россия  
Дата: 07.05.15 10:30
Оценка: 2 (1)
Здравствуйте, kaa.python, Вы писали:

EP>>Шаблоны используются не только для метапрограммирования. А метапрограммирование возможно и без MPL/Fusion/Hana.

EP>>Топик же называется "Метапрограммирование в примерах", а не "MPL/Fusion/Hana в примерах" — поэтому и уточняю.
KP>Ты прав, переименовал.

Ок, несколько примеров:
1. Сериализация
Автор: Evgeny.Panasyuk
Дата: 06.10.14
на базе Boost.Fusion — описываем структуры через BOOST_FUSION_DEFINE_STRUCT и автоматом получаем serialize, operator<, operator==, hash_value, и любой другой необходимый обход этих структур. Например понадобилось при реализации паука обходящего P2P сеть Bitcoin, причём когда понадобился текстовый dump сообщений — достаточно было только написать соответствующий код рекурсивного обхода структур.
2. MPL используется внутри Boost.Variant — мне он часто требуется в реальных проектах.
3. MPL и Fusion используются внутри Boost.Spirit, который например мне понадобился для парсинга грамматики в реальном проекте — более удобной альтернативы я не знаю.
4. MPL используется внутри Boost.TypeErasure, который помогает делать штуки типа std::function и any_iterator (практичность и полезность которых думаю сомнений не вызывает).
5. Товарищ jazzer подробно описывал
Автор: jazzer
Дата: 02.04.08
конкретный пример использования MPL и Variant в реальном проекте.

Книжек фокусирующихся на примерах использования MPL и Fusion — я не видел.
Но например по Fusion мне вполне хватило примеров из документации к библиотеке — это библиотека для работы с гетерогенными структурами данных, в том числе позволяющая эмулировать compile-time reflection/introspection/reification. Опять таки, думаю полезность reflection не вызывает никаких сомнений.

EP>>Это считается примером или нет?

KP>Этот текст? Думаю, очевидно что нет.

Нет, не текст, а Eigen. Мне в реальном проекте понадобился Eigen, внутри которого много template metaprogramming.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.