我有一个包含很多 #define
的 header ,如下所示:
#define XY_ABC_FOO 1
#define XY_ABC_BAR 3
#define XY_ABC_PIPPO 5
#define XY_ABC_PLUTO 7
#define XY_ABC_ETC 19
...
等等等等。
我想将所有这些都放在一个 vector 中。我可以手动完成(几分钟内)。
std::vector<int> defs = { 1, 3, 5, 7, 19 , ... }
但是,下次在 header 中添加定义时,必须有人记得将它们也添加到我的代码中。
是否有任何非常聪明的预处理器/元编程技巧可以在编译时捕获它们? 我并不特别关心快速编译,它是测试代码,因此很少编译,而且大部分时间都在一夜之间编译。
最佳答案
你可以用 awk
来完成:
awk '/^#define XY_ABC_\w+ \d+$/ {
if(line) {
line = line ", " $2
} else {
line = "std::vector<int> defs = { " $2
}
END { print line " };" }' < header.hpp > defs.hpp
然后在您的主程序中使用#include defs.hpp
获取声明。
关于c++ - #define 的匹配列表到一个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37731375/