Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.74
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
#1

Библиотека метапрограммирования - C++

10.12.2011, 15:08. Просмотров 5293. Ответов 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
Вложения
Тип файла: zip meta.zip (46.7 Кб, 47 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2011, 15:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Библиотека метапрограммирования (C++):

Графическая библиотека - C++
Здравствуйте! Я недавно задумался о создании своей графической библиотеки на C++. Можете описать мне функцию для вывода квадрата на экран...

Нужна библиотека Windows.h - C++
Очень нужна библиотека Windows.h ввиде файлов с расширением .h Обратитесь к документации для вызываемой функции Windows. Определите...

Работа с твиттер (нужна библиотека) - C++
Уважаемые программисты! Подскажите пожалуйста какой(ими) библиотеками вы пользуетесь для работы с twitter. Хочу создать бота, который бы...

Библиотека Data Access Object - C++
Подскажите, где можно найти информацию про библиотеку Data Access Object для С++, или примеры создания баз данных с использованием этой...

GUI-программирование. Какая библиотека лучше? - C++
Здравствуйте! Я знаю "консольный" C++, теперь хочется освоить какую-нибудь библиотеку или технологию визуального программирования....

Подскажите как работает эта библиотека? - C++
Не могу понять как работает эта библиотека. Посмотрите я вложил архив саму библиотеку и тест программу. Объясните пожалуйста какова функция...

54
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
25.12.2011, 12:59  [ТС] #31
niXman, а почему не получилось? Что говорят?
0
niXman
Эксперт С++
3138 / 1450 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.12.2011, 13:10 #32
volovzi, однозначно ответить затрудняюсь потому, что гуглил примеры работы с git. потом пытался их использовать. но так ничего и не получилось %)
возможно, либо примеры были не правильные, либо я что-то не так делал, либо для коммита нужно иметь права.

Добавлено через 31 секунду
приведи ты свои команды. только без паролей, если они есть.
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
25.12.2011, 13:20  [ТС] #33
Как-то так:
Код
git clone git@github.com:izvolov/Meta.git

# Произведены какие-то изменения.

cd Meta
git commit -a -m "Проба."
git push origin master
0
niXman
Эксперт С++
3138 / 1450 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.12.2011, 13:51 #34
сделал в точности как ты показал, за исключением url`а.

вывод:
nixman@nixman-pc:~/Meta$ git push origin master
fatal: remote error:
You can't push to git://github.com/izvolov/Meta.git
Use git@github.com:izvolov/Meta.git
он мне рекомендует использовать урл вида: git@github.com:izvolov/Meta.git
но при попытке его использовать, получаю:
nixman@nixman-pc:~$ git clone git@github.com:izvolov/Meta.git
Cloning into Meta...
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
выводы?
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
25.12.2011, 14:56  [ТС] #35
niXman, а, всё-таки надо сначала ответвиться, а потом уже делать запрос на присоединение к основной ветке.
А графические приложения не пробовал? У тебя какая система?

Добавлено через 18 минут
Вот здесь ещё неплохо написано:
http://habrahabr.ru/blogs/Git/125799/#comment_4147240
0
niXman
Эксперт С++
3138 / 1450 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.12.2011, 15:25 #36
Цитата Сообщение от volovzi Посмотреть сообщение
А графические приложения не пробовал?
пробовал. но понятнее не стало. просто нужно заставить себя, и прочесть вводный курс хоть раз

Цитата Сообщение от volovzi Посмотреть сообщение
У тебя какая система?
линукс.

Цитата Сообщение от volovzi Посмотреть сообщение
Вот здесь ещё неплохо написано:
http://habrahabr.ru/blogs/Git/125799/#comment_4147240
ушел читать.
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
28.12.2011, 21:05  [ТС] #37
Ну чё?
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.12.2011, 01:48 #38
volovzi, насколько я понял, нужно зайти в админку репы и добавить niXman'а в collaborators.
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
31.12.2011, 13:43  [ТС] #39
CyBOSSeR, я сначала тоже так думал, но увидел справа словосочетание "Private Collaborators" и решил, что это тоже какая-то платная штука, как и закрытые репозитории.
Добавил Никсмана. Но, насколько я понимаю, он в отъезде, поэтому не отвечает.

Добавлено через 11 часов 27 минут
Ура! Незамутнённый утренний пост(и пред-)праздничный разум творит чудеса.
Наконец-то сделал удаление значения по ключу. Пожалуй, это самая сложная на данный момент метафункция в библиотеке.
Страшно представить, что будет в балансировке.
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
03.01.2012, 14:24  [ТС] #40
С радостью сообщаю, что создание двоичного дерева поиска времени компиляции завершено. Получившаяся структура данных — полноценное дерево АВЛ с соответствующими алгоритмическими характеристиками.

Балансировку оказалось сделать легче, чем я ожидал, в частности, выяснилось, что за высотами ветвей не обязательно следить вручную — узлы могут определять свою высоту автоматически.

Далее последуют усовершенствования, реструктуризации и оптимизации, но то, что оно уже работает — факт.

В репозитории пока нет, но скоро будет.
0
niXman
Эксперт С++
3138 / 1450 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
03.01.2012, 15:05 #41
volovzi, сорри. запраздновался.
завтра возвращаюсь в работу. проверю - отпишусь.
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
03.01.2012, 19:10  [ТС] #42
niXman, я так и понял .

Я тут пока привёл нововведения в приличный вид и залил в репозиторий. Сами деревья лежат в meta/types/(multi-)map.
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
10.01.2012, 22:20  [ТС] #43
Провёл небольшой косметический ремонт того, что уже есть на данный момент.
Из-за того, что я всё-таки решил пойти по пути универсальности деревьев (теперь ключ — тоже тип, но обязательно какой-нибудь числовой), в ближайших планах — реализация арифметических операций со всякими метатипами (целыми, рациональными числами и т.д.).
0
niXman
Эксперт С++
3138 / 1450 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.02.2012, 18:50 #44
volovzi, привет.
убери меня из member`ов. вроде разобрался с gitю хочу попробовать сделать комит не будучи member`ом.
0
volovzi
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
11.02.2012, 00:15  [ТС] #45
niXman, сделано.
0
11.02.2012, 00:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2012, 00:15
Привет! Вот еще темы с ответами:

Как узнать, что поток закончился (библиотека pthread)? - C++
Друзья! Есть ли какая-нибудь pthread-функция, которая вызывается в основном потоке X и показывает- да, созданный ранее поток Y закончился? ...

Как получить TID текущего потока? (библиотека pthread, компилятор g++ 4.6.1 открытый вопрос niXmanу) - C++
Да, как? #include <windows.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> void *BusyWork(void *t) { ...

Библиотека IP*WORKS - C++ Builder
Добрые люди, подскажите, где можно скачать (разумеется бесплатно) библиотеку IP*WORKS для С++.

Библиотека web - C++ Builder
Здравствуйте, подскажите, есть ли какая-нибудь библиотека для работы с web типа synapse?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru