Как я могу сгенерировать переменный макрос для объединенной строки

Я застрял здесь...

#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,

Другие вопросы по тегам