BOOST_PP_SEQ: есть предложения..
От: IROV..  
Дата: 05.11.05 16:05
Оценка:
Вот написал макрос. разбирая макросы BOOST_PP_SEQ_... по реализации думаю превосходит бустовский..
одно из преймуществ основных, макрос не ограничен количеством елементов.. как это зделано в бусте.

#    define IROV_PP_DEFINE_RESULT(res) IROV_PP_DEFINE_RESULT_I(res)
#    define IROV_PP_DEFINE_RESULT_I(x) x

#    define IROV_PP_SEQ_TAIL(Q) IROV_PP_DEFINE_RESULT(IROV_PP_SEQ_TAIL_I Q)
#    define IROV_PP_SEQ_TAIL_I(x)

#    define IROV_PP_SEQ_ENUM(Q) IROV_PP_SEQ_HEAD(Q) ## IROV_PP_SEQ_ENUM_I(IROV_PP_SEQ_TAIL(Q))
#    define IROV_PP_SEQ_ENUM_I(Q) IROV_PP_DEFINE_RESULT(IROV_PP_DEFINE_RESULT(IROV_PP_SEQ_FE_I1 Q) ## _END)

#    define IROV_PP_SEQ_HEAD(Q) IROV_PP_DEFINE_RESULT(IROV_PP_DEFINE_RESULT(IROV_PP_SEQ_HEAD_I Q) ## _END)
#    define IROV_PP_SEQ_HEAD_I(Q) Q IROV_PP_SEQ_EMPTY
#    define IROV_PP_SEQ_EMPTY(Q) IROV_PP_SEQ_EMPTY_I
#    define IROV_PP_SEQ_EMPTY_I(Q) IROV_PP_SEQ_EMPTY
#    define IROV_PP_SEQ_EMPTY_END
#    define IROV_PP_SEQ_EMPTY_I_END


#    define IROV_PP_SEQ_FE_I1_END
#    define IROV_PP_SEQ_FE_I2_END
#    define IROV_PP_SEQ_FE_I1(x) , x IROV_PP_SEQ_FE_I2
#    define IROV_PP_SEQ_FE_I2(x) , x IROV_PP_SEQ_FE_I1

#    define SEQ_D (1)(2)(3)(4)

void main()
{
    printf("SEQ  = [%s]\n",BOOST_PP_STRINGIZE(SEQ_D ));
    printf("ENUM = [%s]\n",BOOST_PP_STRINGIZE(IROV_PP_SEQ_ENUM(SEQ_D) ));
    printf("TAIL = [%s]\n",BOOST_PP_STRINGIZE(IROV_PP_SEQ_TAIL(SEQ_D) ));
    printf("HEAD = [%s]\n",BOOST_PP_STRINGIZE(IROV_PP_SEQ_HEAD(SEQ_D) ));

    printf("\n\n\n");
}


Если я ничего не пропустил.. думаю стоит пересмотреть препроцесор в бусте, потомучто технология..

IROV_PP_DEFINE_RESULT(IROV_PP_DEFINE_RESULT(IROV_PP_SEQ_HEAD_I Q) ## _END)


дает большие возможности

Сейчас попробую написать IROV_PP_SEQ_FOR_EACH
я не волшебник, я только учусь!
Re: BOOST_PP_SEQ: есть предложения..
От: IROV..  
Дата: 05.11.05 16:55
Оценка:
#  define IROV_PP_PARA_FIRST_PARAM(F) IROV_PP_PARA_FIRST_PARAM_I F
#  define IROV_PP_PARA_FIRST_PARAM_I(x,y) x

#    define IROV_PP_SEQ_HEAD(Q) IROV_PP_DEFINE_RESULT(IROV_PP_PARA_FIRST_PARAM( (IROV_PP_SEQ_HEAD_I Q) ) ) 
#    define IROV_PP_SEQ_HEAD_I(Q) Q , (


Упграйд
я не волшебник, я только учусь!
Re[2]: BOOST_PP_SEQ: есть предложения..
От: Аноним  
Дата: 05.11.05 18:00
Оценка:
То ли я такой, то ли компилятор, но:
-до апгрейда на gcc IROV_PP_SEQ_ENUM выводило только 1 элеметн множетсва
-после апгрейда выводило ошибку...
В студии все работает. Кстати, в gcc макросы такого типа вряд ли будут работать нормально, по-моему.
Re[3]: BOOST_PP_SEQ: есть предложения..
От: IROV..  
Дата: 05.11.05 18:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>То ли я такой, то ли компилятор, но:

А>-до апгрейда на gcc IROV_PP_SEQ_ENUM выводило только 1 элеметн множетсва
А>-после апгрейда выводило ошибку...
А>В студии все работает. Кстати, в gcc макросы такого типа вряд ли будут работать нормально, по-моему.
Тогда использовать как частный случай для MSVC
я не волшебник, я только учусь!
Re[4]: BOOST_PP_SEQ: есть предложения..
От: noobOOP  
Дата: 05.11.05 18:14
Оценка:
Здравствуйте, IROV.., Вы писали:

IRO>Здравствуйте, Аноним, Вы писали:


А>>То ли я такой, то ли компилятор, но:

А>>-до апгрейда на gcc IROV_PP_SEQ_ENUM выводило только 1 элеметн множетсва
А>>-после апгрейда выводило ошибку...
А>>В студии все работает. Кстати, в gcc макросы такого типа вряд ли будут работать нормально, по-моему.
IRO>Тогда использовать как частный случай для MSVC
Здравствуйте, IROV.., Вы писали:

IRO>Здравствуйте, Аноним, Вы писали:


А>>То ли я такой, то ли компилятор, но:

А>>-до апгрейда на gcc IROV_PP_SEQ_ENUM выводило только 1 элеметн множетсва
А>>-после апгрейда выводило ошибку...
А>>В студии все работает. Кстати, в gcc макросы такого типа вряд ли будут работать нормально, по-моему.
IRO>Тогда использовать как частный случай для MSVC
Ага
А вообще, иногда баги Микрософт даже на руку... Как например, передача скобки "(" в качестве параметра :-D
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.