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
я не волшебник, я только учусь!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.