Какие библиотеки используют шаблоны проектирования, реализованные с помощью методов метапрограммирования во время компиляции? - PullRequest
4 голосов
/ 01 мая 2010

Кто-нибудь знает о каких-либо библиотеках, которые используют шаблоны проектирования, которые реализованы с использованием методов времени компиляции, например шаблон метапрограммирования? Я знаю, что Loki реализует несколько, но мне нужно найти другие библиотеки.

Ответы [ 5 ]

6 голосов
/ 01 мая 2010

Boost.Spirit довольно большой.

2 голосов
/ 01 мая 2010

Это зависит от того, какой шаблон проектирования вас интересует. Есть такие, как «Активный объект» и «Утилизация», которые будут трудно реализовать во время компиляции.

шаблон "интерпретатора" -> boost.ublas и blitz ++ оба используют "шаблоны выражений"

шаблон "bridge" -> Каждый стандартный контейнер принимает аргумент "allocator" (большая часть Loki также является шаблонами bridge)

шаблон "стратегии" -> функции шаблонов STL выбирают наилучшую реализацию на основе типов аргументов

Единственное различие во всем этом заключается в том, что оценка шаблона происходит при запуске компилятора, а не при запуске исполняемого файла. Поэтому все, что вам нужно, это немного изменить мышление: шаблоны - это программа, а «компилятор C ++» запускает и интерпретирует эту программу. Результатом этой шаблонной программы является объектный файл, готовый для компоновки. Другими словами, время выполнения кода вашего шаблона является точным, когда ваш компилятор работает. Шаблоны C ++ представляют собой полноценный функциональный язык, как lisp или XSLT.

На самом деле самая первая шаблонная метапрограмма в 1993 году имела на выходе не исполняемый файл, а серию ошибок компилятора, которые печатали последовательность fibonacii или что-то в этом роде.

1 голос
/ 01 мая 2010

Некоторые библиотеки, которые используют шаблоны выражений: ublas, blitz, матричный шаблон Library, ftensor или шаблонную матрицу Google C ++, чтобы найти еще больше.

кстати, фетенсор действительно гладкий http://www.gps.caltech.edu/~walter/FTensor/FTensor.pdf.

0 голосов
/ 23 мая 2010

Есть ли у нас GPG?

Любой случай, реализованный в Локи: - Фабрика Аннотация - Фабрика - Синглтон - посетитель - Команда

В ускорении Flyweight

В STL у вас есть итераторы и адаптеры, хотя я уверен, что они не учитываются из-за того, что время компиляции?

Исходная спецификация несколько расплывчата.

Убедитесь, что вы не путаете обобщенное программирование (реализации на основе шаблонов) с другими методами времени компиляции.

Кто-нибудь знает, что означает приведенный выше вопрос?

0 голосов
/ 01 мая 2010

Я думаю, что вы спрашиваете о библиотеках, которые помогают использовать шаблон проектирования больше, чем библиотеки, использующие шаблоны проектирования, не так ли?

В Boost есть некоторые, но не слишком, например, шаблон Flyweight - Design для управления большим количеством сильно избыточных объектов.

Еще не выпущенная, но принятая библиотека Boost.Factory и отклоненная библиотека Boost.Singleton

Есть также некоторые библиотеки, которые реализуют идиомы C ++, такие как Boost.Pimpl (по расписанию), выход из области (принят), Memoizer.

...