В астрале
Эксперт С++
8044 / 4801 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
1

boost::mpl и метапрограммирование вцелом

10.06.2011, 11:27. Показов 7303. Ответов 11
Метки нет (Все метки)

Сейчас сижу любуюсь на mpl::vector.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
template<
      typename T0, typename T1, typename T2, typename T3, typename T4
    , typename T5, typename T6, typename T7, typename T8, typename T9
    , typename T10, typename T11, typename T12, typename T13, typename T14
    , typename T15, typename T16, typename T17, typename T18, typename T19
    , typename T20, typename T21, typename T22, typename T23, typename T24
    , typename T25, typename T26, typename T27, typename T28, typename T29
    , typename T30, typename T31, typename T32, typename T33, typename T34
    , typename T35, typename T36, typename T37, typename T38, typename T39
    , typename T40
    >
struct vector41
{
    typedef aux::vector_tag<41> tag;
    typedef vector41 type;
    typedef T0 item0;
    typedef T1 item1;
    typedef T2 item2;
    typedef T3 item3;
    typedef T4 item4;
    typedef T5 item5;
    typedef T6 item6;
    typedef T7 item7;
    typedef T8 item8;
    typedef T9 item9;
    typedef T10 item10;
    typedef T11 item11;
    typedef T12 item12;
    typedef T13 item13;
    typedef T14 item14;
    typedef T15 item15;
    typedef T16 item16;
    typedef T17 item17;
    typedef T18 item18;
    typedef T19 item19;
    typedef T20 item20;
    typedef T21 item21;
    typedef T22 item22;
    typedef T23 item23;
    typedef T24 item24;
    typedef T25 item25;
    typedef T26 item26;
    typedef T27 item27;
    typedef T28 item28;
    typedef T29 item29;
    typedef T30 item30;
    typedef T31 item31;
    typedef T32 item32;
    typedef T33 item33;
    typedef T34 item34;
    typedef T35 item35;
    typedef T36 item36;
    typedef T37 item37;
    typedef T38 item38;
    typedef T39 item39;
    typedef T40 item40;
    
 
    typedef void_ item41;
    typedef T40 back;
    typedef v_iter< type,0 > begin;
    typedef v_iter< type,41 > end;
};
файл boost/mpl/vector/aux_/preprocessed/no_cpts/vector50.hpp и думаю реально-ли это сделать по-другому, учитывая грядущую (а кое-где уже текущую) возможность использовать шаблоны с переменным количеством аргументов или же все равно, если нужно метапрограммирование и удобство нужно будет либо использовать таких монстров, либо писать самому, ежели буст/локи не подойдут или будут ограничения на использование или есть все же другой путь, другие возможности?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.06.2011, 11:27
Ответы с готовыми решениями:

Метапрограммирование в boost::proto (boost::spirit)
В библиотеке boost:: proto есть такой код calculator&lt;proto::terminal&lt;placeholder&lt;0&gt; &gt;::type&gt;...

split mpl::boost
Реализация compile-time алгоритма split для строки. Так как оставлять сообщения в теме...

Сумма во время компиляции, boost::mpl
здравствуйте, пытаюсь понять азы mpl... подскажите в чем разница: template&lt;typename T1, typename...

Boost начало работы: Undefined reference to `boost::system::generic_category() '
Добрый день Собственно говоря возникла необходимость использовать boost в работе. Поставил так: ...

11
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.06.2011, 12:24 2
Цитата Сообщение от ForEveR Посмотреть сообщение
boost/mpl/vector/aux_/preprocessed/no_cpts/vector50.hpp и думаю реально-ли это сделать по-другому, учитывая грядущую (а кое-где уже текущую) возможность использовать шаблоны с переменным количеством аргументов
в будущем будет возможно. а пока что, этому препятствует это: http://liveworkspace.org/code/... a87ece68d0

постоянно натыкаюсь
приходится костыли писать...

Добавлено через 2 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
если нужно метапрограммирование и удобство нужно будет либо использовать таких монстров
о ком речь? о бусте?

Цитата Сообщение от ForEveR Посмотреть сообщение
либо писать самому
что писать? mpl контейнеры и алгоритмы? оО

Цитата Сообщение от ForEveR Посмотреть сообщение
ежели буст/локи не подойдут или будут ограничения на использование
например?

Цитата Сообщение от ForEveR Посмотреть сообщение
или есть все же другой путь, другие возможности?
конечно. запросто все написать самому
1
В астрале
Эксперт С++
8044 / 4801 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.06.2011, 12:30  [ТС] 3
niXman, Ну собственно главный вопрос был будет ли удобно использование для этого шаблонов с переменным числом параметров, если придется писать нечто вроде этого самому.
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.06.2011, 12:43 4
Цитата Сообщение от niXman Посмотреть сообщение
этому препятствует это: http://liveworkspace.org/code/... a87ece68d0
хотя в статусе реализации сказано что реализация вариадиков завершена полностью. враки, все это
можно попробовать 4.7.0 snapshot.. может в нем наконец-то реализовали..

Добавлено через 47 секунд
Цитата Сообщение от ForEveR Посмотреть сообщение
будет ли удобно использование для этого шаблонов с переменным числом параметров, если придется писать нечто вроде этого самому.
однозначно!

Добавлено через 9 минут
кстати, для обхода вышеприведенной недореализации, я использую такую обертку: http://liveworkspace.org/code/... eee7304c62

ибо страшно представить, что мне пришлось бы руками писать необходимое кол-во специализаций
1
Эксперт С++
1067 / 846 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
10.06.2011, 14:48 5
Вообще-то, если б метаязык был полноценным языком, то он позволял бы объявлять переменные и в частности - контейнеры (набор однотипных переменных). Вот лисп. Там списки - наше все! И атомы. А какого они типа - дело десятое...
Поэтому Лисп является собственным метаязыком: программы на лиспе можно формировать с помощью программы, написанной на лиспе же... Просто формируешь новый список, а потом скармливаешь его некоей функции типа eval()...

А в С++ метапрограммирование ОБНАРУЖИЛОСЬ вследствие рекурсивного характера обработки шаблонов (см. опять же Лисп - изначально рекурсивный язык).
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.06.2011, 15:03 6
ValeryLaptev, ну все! бросаю все дела(работу/карьеру/перспективу) и иду учить лисп!

Вы вообще к чему это?
не маленький. подобных сравнений наслышан. но все они какие-то...некомпетентные, что-ли..

но спасибо.

Добавлено через 52 секунды
ах да, чуть не забыл, самое главное! Вы мне только это...покажите вакансии по лиспу и ЗП, пожалуйста.
0
В астрале
Эксперт С++
8044 / 4801 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.06.2011, 16:08  [ТС] 7
niXman, Слушай, а то, что ты скидывал в первый раз, там где вариадик темплейт в mpl::vector пытался закачать - вообще корректно и будет-ли возможно? Или только при наличии контейнера действующего так?
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.06.2011, 16:40 8
ForEveR, оно обязано работать с любыми списками типов.
в сообщении компилятора говориться же:
sorry, unimplemented: cannot expand 'T ...' into a fixed-length argument list
т.е. это не ошибка. вполне себе валидная инструкция.
подобное сообщение выводится при попытке получить параметр по индексу из types-pack`а.

остается ждать...

Добавлено через 13 минут
ForEveR, а почему тебя это так беспокоит? хочешь свою версию mpl-библиотеки написать?

Добавлено через 11 минут
кстати gcc-4.7.0-20110604 говорит точно также
1
В астрале
Эксперт С++
8044 / 4801 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
10.06.2011, 16:54  [ТС] 9
niXman, Да нет. Интересно просто.
0
Эксперт С++
1067 / 846 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
10.06.2011, 19:32 10
Цитата Сообщение от niXman Посмотреть сообщение
ValeryLaptev, ну все! бросаю все дела(работу/карьеру/перспективу) и иду учить лисп!

Вы вообще к чему это?
не маленький. подобных сравнений наслышан. но все они какие-то...некомпетентные, что-ли..

но спасибо.

Добавлено через 52 секунды
ах да, чуть не забыл, самое главное! Вы мне только это...покажите вакансии по лиспу и ЗП, пожалуйста.
1. Вроде не вакантные места обсуждали, а возможности метаязыка и метапрограммирования.
2. Мы еще в 1983 году для реализации одной системы сначала прикрутили к PL-1 Лисп. Потом на смеси этих языков реализовали интерпретатор специально разработанного языка программирования, а потом на этом языке уже написали проект. Вот где было метапрограммирование!
3. Это я к тому, что может быть проще будет надстроечку к С++ слабать - чтобы подобных шаблонов не городить. Не сильно сложную, но облегчающую писание подобных вещей. Подумайте.
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
10.06.2011, 19:46 11
ValeryLaptev, не интересный холивар затеваете. сделаю вид что что я ничего не видел.
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
16.06.2012, 13:36 12
Лучший ответ Сообщение было отмечено ForEveR как решение

Решение

Цитата Сообщение от ForEveR Посмотреть сообщение
niXman, Ну собственно главный вопрос был будет ли удобно использование для этого шаблонов с переменным числом параметров, если придется писать нечто вроде этого самому.
спешу обрадовать интересующихся: это таки доделали в 4.7.1!
http://liveworkspace.org/code/... 1b68d97e40
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2012, 13:36
Помогаю со студенческими работами здесь

Boost Log - undefined reference to `boost::system::system_category()'
Пытаюсь скомпилировать код из примеров Boost Log:#include &lt;boost/log/trivial.hpp&gt; int main(int,...

MPL push_back
А как тут push_back пользоваться?#include &lt;iostream&gt; #include &lt;type_traits&gt; #include...

tmp with mpl
я в ран тайме заполняю массив числами фибоначи до 10000 элемента...можно ли вычислить в компиле...

Использование boost и boost.build с несколькими компиляторами
Здравствуйте! Собрал библиотеку boost и boost.build для двух компиляторов: MinGW 4.5.2 и Visual...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru