Научите магии макросов
От: Muxa  
Дата: 20.06.15 20:18
Оценка:
Есть куча строк вида

"SectionA0.SectionB0.ParamX"
"SectionA0.SectionB0.ParamY"
"SectionA0.SectionB1.ParamZ"
"SectionA1.SectionB2.SectionC0.ParamW"
...

Вложенность секций произвольная, в разумных пределах 2-3-4.

Эти строки используются в коде:
SomeFunctionCall("SectionA0.SectionB0.ParamX");

Хочется загнать их в константы:
namespace SectionA0 {
    namespace SectionB0 {
        static const char* ParamX = "SectionA0.SectionB0.ParamX";
        static const char* ParamY = "SectionA0.SectionB0.ParamY";
    }
    namespace SectionB1 {
        static const char* ParamZ = "SectionA0.SectionB1.ParamZ";
    }
}
namespace SectionA1 {
    namespace SectionB2 {
        namespace SectionC0 {
            static const char* ParamW = "SectionA1.SectionB2.SectionC0.ParamW";
        }
    }
}
...

чтобы в результате использовать константы как:
    SomeFunctionCall(SectionA0::SectionB0::ParamX);


Так как имена секций используются много раз, есть вероятность ошибки копипасты.
Поэтому решил применить магию макросов:
BEGIN_SECTION(SectionA0)
    BEGIN_SECTION(SectionB0)
        ENTRY(ParamX)
        ENTRY(ParamY)
    END_SECTION
    BEGIN_SECTION(SectionB1)
        ENTRY(ParamZ)
    END_SECTION
END_SECTION
BEGIN_SECTION(SectionA1)
    BEGIN_SECTION(SectionB2)
        BEGIN_SECTION(SectionC0)
            ENTRY(ParamW)
        END_SECTION
    END_SECTION
END_SECTION
...


В общем, даже не знаю как вопрос гуглу задать чтобы такие макросы накастовать.
Единственное что нарыл http://jhnet.co.uk/articles/cpp_magic
Сижу изучаю, может что и получится.
Любые советы приветствуются.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.