11 нояб. 2009 г.

Ликбез по Boost.Preprocessor

Часто приходится слышать вздыхания коллег и вопросы "Почему так и зачем?" при виде например такого:
#define BOOST_FUSION_ADAPT_STRUCT(name, bseq)                       \
    BOOST_FUSION_ADAPT_STRUCT_I(                                    \
        name, BOOST_PP_CAT(BOOST_FUSION_ADAPT_STRUCT_X bseq, 0))    \
    /***/

#define BOOST_FUSION_ADAPT_STRUCT_X(x, y)    \
    ((x, y)) BOOST_FUSION_ADAPT_STRUCT_Y
#define BOOST_FUSION_ADAPT_STRUCT_Y(x, y)    \
    ((x, y)) BOOST_FUSION_ADAPT_STRUCT_X
#define BOOST_FUSION_ADAPT_STRUCT_X0
#define BOOST_FUSION_ADAPT_STRUCT_Y0
Я же начинаю грустить с мыслями "ипать-колотить, ну тут же всё просто!"...

Поэтому, дабы разбавить свой залежавшийся блог свежачком, я решил написать более-менее подробный ликбез о простом, а именно о Boost.Preprocessor.
Приведённый пример (boost/fusion/adapted/struct/adapt_struct.hpp) я разберу в конце статьи.