Можно ли включить последовательность файлов: file1,file2,file3
в цикл препроцессора?
#include <boost/preprocessor/iteration/local.hpp>
#include <boost/preprocessor/cat.hpp>
// needed whitespace here----*
#define BOOST_PP_LOCAL_LIMITS (1, 3)
#define GENERATE_FILE_NAME(n) \
BOOST_PP_STRINGIZE( BOOST_PP_CAT( file , n) ) \
/**/
#define BOOST_PP_LOCAL_MACRO(n) \
#include GENERATE_FILE_NAME(n) \
а затем использовать его с:
#include BOOST_PP_LOCAL_ITERATE()
следует расширить до
BOOST_PP_LOCAL_MACRO(1) --> includes file1
BOOST_PP_LOCAL_MACRO(2) --> includes file2
BOOST_PP_LOCAL_MACRO(3) --> includes file3
К сожалению, вышеуказанное не работает из-за #include GENERATE_FILE_NAME(n)
в макросе, который не расширяется...
Это вообще возможно?
Комментарий:
Я разместил этот вопрос, потому что мне было интересно, возможно ли это вообще. Я решил свою проблему, включив только один файл, который был сгенерирован из всех файлов file1 file2 file3
. Я столкнулся с этим, потому что иногда можно генерировать большие последовательности включаемых файлов (которые не следует объединять только из-за удобочитаемости), и я не был уверен, как включить все это без явного написания всех имен файлов, поэтому я подумал о циклах препроцессора, которые конечно, уродливее, чем мое решение до сих пор :-), но оно красивее :-)
#define
макросов с разными возможностями. Вы ищете решение C или решение C++? На данный момент я удалю тег C. - person Sebastian Mach   schedule 18.12.2013file1 file2 file3
. Я столкнулся с этим, потому что иногда хотелось бы сгенерировать большие последовательности включаемых файлов (которые не должны быть объединены только из-за удобочитаемости), и я не знал, как включить все это без явного написания всех имен файлов, поэтому я подумал о циклах препроцессора. , что, конечно, уродливее, чем мое решение до сих пор :-), но оно красивее :-) - person Gabriel   schedule 19.12.2013