如何生成宏的所有出现的列表
How to generate a list of all occurances of a macro?
我有一些用COMPONENT
宏标记的struct
声明。我想从这些声明中构建一个类型列表。给定此代码:
// a.hpp
COMPONENT(A) {
// struct body
};
// bc.hpp
COMPONENT(B) {
// struct body
};
COMPONENT(C) {
// struct body
};
我想生成一个如下所示的元组:
constexpr auto components = std::make_tuple(
Comp<A>{“A”},
Comp<B>{“B”},
Comp<C>{“C”}
);
元组中元素的顺序无关紧要。我还必须手动包含包含COMPONENT
声明的所有标头。
我可以编写一个在构建时生成文件的 Python 脚本,但如果可能的话,我想使用预处理器执行此操作。我认为这是不可能的,但我见过人们用预处理器做一些疯狂的事情,所以我想我会问。我不了解宏元编程,就像我了解模板元编程一样。
你不能用 C 预处理器本身来做到这一点。它非常有限,并且不支持成熟的脚本语言 - 不是很远。
您的两个行动方案是:
- 使用编译器的前端获取预处理语法树(clang 可能会让你这样做;不太确定 GCC(
- 使用 Python/Perl/bash/awk/sed 脚本来查找宏的用途。
1 要努力得多(除非你可以适应另一个现有的工具(,但很准确;选项 2 需要很少的努力,但如果不"重新发明轮子",这是非常不准确的 - 有误报(例如字符串中的宏名称(,也可能有漏报(例如,在宏中应用的宏,当它的名称是通过连接标识符生成的(。
相关文章:
- C++如何生成std::数组列表
- 根据预定义的值生成字符列表
- 生成包含给定类型的 N 个参数的可变参数列表的最佳方法?
- 如何使用模板生成常规参数列表并将其传递给运行时函数?
- c++17通过生成预先声明的类型列表的笛卡尔乘积来生成std::变体
- 根据模板参数生成不同大小的初始值设定项列表
- 正确的生成文件依赖项列表 (C++)
- CMake 生成不带 glob 的源文件列表
- 使用生成来填充模板类 c++ 中的列表
- 生成模板实例列表并对其调用静态函数
- 使用GCC的C makefile - 从子文件夹列表中生成源文件列表
- 生成对列表
- 在 c++ 中生成字符串到 std::指针列表的映射
- C 生成列表的不同排列
- 如何通过C 从数字列表中以3位数字生成数字
- 成员初始值设定项列表中的递增是否会生成未定义的行为?
- 如何生成宏的所有出现的列表
- 从一系列问题列表中生成输入(x)问题
- 从置换的解析器表达式列表动态生成Spirit解析器表达式(在运行时)
- OpenCV -如何从.ppm文件列表中生成.avi文件