|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
Библиотека метапрограммирования10.12.2011, 15:08. Показов 7478. Ответов 54
Метки нет (Все метки)
Увлекшись метапрограммированием, начатым в предыдущей теме, я решил написать небольшую библиотеку метафункций.
Изначально всё это предназначалось для работы с кортежами, но на самом деле оно применимо к любым шаблонным классам. В том числе возможна совместная работа с библиотекой "Boost.MPL" (но очень осторожная, т.к. в "Бусте" не используются списки типов переменной длины). Отличие от аналогов, в том числе того же "Boost.MPL" состоит, в основном, в том, что результат всех метафункций предсказуем (в "Бусте" он неопределён). Второе отличие — отсутствие теоретических ограничений на количество типов в шаблонах. Есть и новшества: я ввёл новый результат метафункции — шаблон, он же "pattern" (т.к. "template" уже является ключевым словом). Смысл его следует из названия: это не тип ("type") и не значение ("value"), а шаблон класса, который может быть в дальнейшем конкретизирован новыми типами (см. метафункцию "get_pattern"). Это первый вариант библиотеки, не влючающий итераторы. Они появятся в следующей версии. Прошу ознакомиться, кому не лень, и с нетерпением жду отзывов и предложений. Исходники, так же доступны и на GitHub: https://github.com/izvolov/Meta клонировать так: git clone git://github.com/izvolov/Meta.git
6
|
|
| 10.12.2011, 15:08 | |
|
Ответы с готовыми решениями:
54
Применение метапрограммирования Паттерны метапрограммирования шаблонов Дорожная библиотека + основная библиотека процессов |
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 10.12.2011, 17:23 | |
|
volovzi, Интересно... Но почему бы не использовать boost вместе? Например meta::select - тот же mpl::if_.
are_equal == boost::is_same.
0
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 10.12.2011, 17:31 [ТС] | |
|
ForEveR, ждал этого вопроса.
Библиотека вся весит пока что сотню килобайт, поэтому не хочется тащить за ней многомегабайтный "Буст". К тому же мне не нравятся начальные и завершающие подчёркивания в именах .А по поводу "are_equal" — это я забыл убрать. Во-первых, в библиотеке она не используется, а во-вторых, уже есть "std::is_same". Кстати, "select" тоже, вроде, в данный момент не используется...
1
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 10.12.2011, 17:40 | |
|
volovzi, Но вообще очень даже интересная либа. Развивайте обязательно. Немного позже попробую ее использовать.
1
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 10.12.2011, 17:45 [ТС] | |
|
ForEveR, спасибо. К следующей версии допишу исчерпывающие комментарии, допилю итераторы и, может, сделаю какую-нибудь документацию.
0
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 10.12.2011, 22:30 [ТС] | |
|
niXman, дык там платы, вроде, требуют.
А вообще, да, надо найти, где разместить исходники. Я над этим думаю.
0
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 11.12.2011, 02:31 [ТС] | |
|
niXman, уже разобрался, скоро сделаю.
Добавлено через 39 минут Ну вот как-то так: https://github.com/izvolov/Meta Добавлено через 35 минут Всё, теперь всё должно быть правильно. Товарищи модераторы, добавьте, пожалуйста, ссылку в первое сообщение темы.
0
|
|
|
|
|
| 11.12.2011, 06:05 | |
|
get_pattern<> - хорошая идея
![]() volovzi, может тему перенести в https://www.cyberforum.ru/cpp-experts/ ?
0
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 11.12.2011, 15:58 [ТС] | |
|
niXman, не стоит. Тот раздел закрытый, а мне не хотелось бы ограничивать комментирование в этой теме — тут и так народу немного.
0
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 19.12.2011, 00:37 [ТС] | |
|
Обновил репозиторий.
Добавлены комментарии, читаемые сообщения об ошибках и немного итераторных метафункций. К сожалению, итераторы навели в библиотеке лёгкий беспорядок — их пришлось запихивать в отдельное пространство имён, и я ещё не решил, как их лучше структурировать: либо создавать в каждом разделе дополнительную папку с итераторными метафункциями, либо выделить все итераторы в отдельный блок, в котором будут свои разделы, либо оставить так, как сейчас — всё в куче. Далее, в продолжение развития темы новой концепции шаблонов ("patterns") появился контейнер шаблонов — "pattern_list<...>", который пригодился как раз в итераторах. И, поскольку изначально всё создавалось для работы с кортежами, написал метафункцию, распаковывающую кортеж и передающую его в функцию или функтор так, как будто это не кортеж, а набор отдельных переменных. Она работает, но мой компилятор, к сожалению, её не тянет, поэтому она не в проекте, а отдельно по ссылке: http://liveworkspace.org/code/... 4a54a4a227
0
|
|
|
|
|||||||
| 19.12.2011, 20:00 | |||||||
|
Добавлено через 12 часов 53 минуты volovzi, идея такая есть... добавь еще шаблон создания кортежа из произвольного набора индексов типов. типа:
0
|
|||||||
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|||
| 19.12.2011, 20:15 [ТС] | |||
0
|
|||
|
|
|||
| 19.12.2011, 20:27 | |||
|
релиз выйдет в феврале. Добавлено через 2 минуты
0
|
|||
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|||
| 19.12.2011, 20:40 [ТС] | |||
0
|
|||
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 22.12.2011, 21:48 [ТС] | |
Сообщение было отмечено как решение
Решение
"По заявкам трудящихся" написал метафункцию "subset", позволяющую создавать новый класс из произвольного подмножества типов некоторого класса. К сожалению, по-умному сделать пока что не удалось, поэтому время работы — O(m * n), где n — число типов в исходном шаблоне, а m — размер формируемого подмножества.
Тем не менее, поиски лучшего результата продолжаются. Изменения вступят в силу со следующего коммита. Добавлено через 23 часа 53 минуты Не прошло и дня, как мне удалось сильно продвинуться. Буквально только что написал метакласс, который является полноценным двоичным деревом поиска со всеми его алгоритмическими характеристиками. Правда, пока что нет балансировки (не было времени, спешил сообщить об успехах), но я думаю, что раз есть принципиальная возможность создать дерево, то и отбалансировать его получится. Надеюсь, эта штука поможет усовершенствовать некоторые не очень быстрые алгоритмы.
3
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
||||||
| 23.12.2011, 22:18 [ТС] | ||||||
Сообщение было отмечено как решение
Решение
niXman, собираюсь, конечно!
Но нужно сначала придумать, как это оформить и структурировать. Не сегодня, так завтра обязательно выложу. Добавлено через 22 минуты Тут ведь вот какая проблема возникла: до сих пор библиотека была рассчитана на работу с типами шаблонов, а дерево — реальный контейнер времени компиляции. Поэтому такие метафункции, как, например, "insert", будут иметь совершенно разный смысл. В первом случае это создание новой конкретизации шаблона с новыми типами, а во втором — внесение значения в контейнер, количество шаблонных параметров которого при этом не меняется. И мне пока непонятно, как эту проблему разруливать. Добавлено через 23 часа 26 минут Задействовал черновую версию двоичного дерева. Пока что оно, вместе со всеми своими метафункциями, лежит в папке meta/types/. Работает оно так:
3
|
||||||
|
|
|||
| 24.12.2011, 01:08 | |||
|
0
|
|||
| 24.12.2011, 01:08 | |
|
Помогаю со студенческими работами здесь
20
Библиотека QT Linux X11 и библиотека QT Embedded Linux одно ито же??? Библиотека Библиотека библиотека GD БД Библиотека Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|