Как я могу сгенерировать переменный макрос для объединенной строки
Я застрял здесь...
#define CONCAT(a,b) BOOST_PP_STRINGIZE(BOOST_PP_CAT(a,b))
#define CONCAT1(a,b,c) CONCAT(CONCAT(a,b),c) and so on.
Как я могу сгенерировать макрос CONCAT, даже если 20 аргументов? Может быть, я могу использовать BOOST_PP_SEQ_FOR_EACH, но я не понимаю, как это сделать?
2 ответа
Решение
Это зависит от вашего варианта использования.
это
#include <boost/preprocessor/cat.hpp>
#include <boost/preprocessor/stringize.hpp>
#include <boost/preprocessor/seq/for_each.hpp>
#define SEQ (a)(b)(c)
BOOST_PP_STRINGIZE(BOOST_PP_SEQ_CAT(SEQ)) // "abc"
объединит последовательность и затем ее зафиксирует. Также возможно просто структурировать каждый аргумент как "a" "b" "c"
эквивалентно "abc"
,
#define MY_STRINGIZE(r, data, elem) BOOST_PP_STRINGIZE(elem)
BOOST_PP_SEQ_FOR_EACH(MY_STRINGIZE, _, SEQ)
Поскольку вы уже используете библиотеки Boost, попробуйте BOOST_PP_SEQ_CAT
( документация). Он берет список элементов и просто объединяет их вместе, т.е. BOOST_PP_SEQ_CAT(a b c)
результаты в abc
,