头文件序列上的预处理器循环
Preprocessor loop over sequence of header files
是否可以包含一系列文件: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
。我遇到了这个问题,因为有时可能会生成大的包含文件序列(不应该合并,只是因为可读性),而且我不确定如何在不明确写入所有文件名的情况下包含所有这些,所以我考虑了预处理器循环,这当然比我迄今为止的解决方案更丑陋:-),但它更漂亮:-)
这
适用于 g++:
在包含路径中具有目录预处理器,并且此include_range.h:
#if !BOOST_PP_IS_ITERATING
#ifndef INCLUDE_RANGE_PREFIX
#error Missing INCLUDE_RANGE_PREFIX
#endif
#ifndef INCLUDE_RANGE_MIN
#error Missing INCLUDE_RANGE_MIN
#endif
#ifndef INCLUDE_RANGE_MAX
#error Missing INCLUDE_RANGE_MAX
#endif
#include <boost/preprocessor/iteration/iterate.hpp>
#define BOOST_PP_ITERATION_PARAMS_1 (3,
(INCLUDE_RANGE_MIN, INCLUDE_RANGE_MAX, <preprocessor/include_range.h>))
#include BOOST_PP_ITERATE()
#else
#define INCLUDE_RANGE_PATH_SUFFIX(F, N) F##N
#define INCLUDE_RANGE_PATH(F, N) <INCLUDE_RANGE_PATH_SUFFIX(F, N)>
#include INCLUDE_RANGE_PATH(INCLUDE_RANGE_PREFIX, BOOST_PP_ITERATION())
#if BOOST_PP_ITERATION_DEPTH() == INCLUDE_RANGE_MAX - INCLUDE_RANGE_MIN + 1
#undef INCLUDE_RANGE_PREFIX
#undef INCLUDE_RANGE_MIN
#undef INCLUDE_RANGE_MAX
#endif
#endif
您可以包含一系列文件(文件 2、文件 3、文件 4):
#define INCLUDE_RANGE_PREFIX file
#define INCLUDE_RANGE_MIN 2
#define INCLUDE_RANGE_MAX 4
#include <preprocessor/include_range.h>
限制:文件位于包含路径中。
相关文章:
- 错误:无效的预处理指令 #i 的意思是 #if?
- C++预处理会生成变量成员、资源库和映射
- 使用预处理指令检查是否包含标头?
- 预处理的 C/C++ 文件是否特定于计算机?
- 使用 GCC 对 C 文件进行部分预处理(不删除 "define" 指令)
- 在 CPLEX 中求解线性规划,无需剪切和预处理
- CPP -D 选项,用于预处理 Fortran 代码
- 错误:粘贴"tmp_UINT"和"+"未提供有效的预处理令牌
- 任务计划程序库的预处理不起作用 - 多定义错误
- Eclipse 问题 - 编译期间不考虑 .c 和 .cpp 文件中定义的预处理
- 使用python预处理后,C++(opencv)中的垫子类型数据与image_to_array相同
- Howo 使用 cl 预处理为 masm 组装生成一个单独的文件
- 我有一个预处理的 C/C++ 源文件 (cacti.i).如何从这个 .i 文件生成可执行二进制文件,以便我可以像 ./
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 是具有预处理前分支实现的结构违反ODR
- 与不完整的Cholesky预处理的共轭梯度返回特征库的意外错误
- Visual Studio C - 无法输出预处理文件
- 在海湾合作委员会中加快宏观预处理的任何方法
- Xmllint未设置,而在路径中找不到XMLLINT;跳过XML预处理
- 当头文件被预处理时是否有一个预处理器选项显示?