我有一些struct
声明,它们带有一个COMPONENT
宏。我想从这些声明中建立一个类型列表。给出以下代码:
// 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脚本来在构建时生成文件,但是如果可能的话,我希望使用预处理器来执行此操作。我认为这是不可能的,但是我已经看到人们用预处理器做一些疯狂的事情,所以我想问一下。我不了解宏元编程,也不了解模板元编程。
答案 0 :(得分:0)
您不能使用C预处理器本身执行此操作。它是非常有限的,并且不支持完整的脚本语言-远不是这样。
您的两个行动方针是:
选项1的工作量要多得多(除非您可以改编另一个现有工具),但是要准确;选项2所需的精力很少,但是如果没有“重新发明轮子”,就会非常不准确-带有假肯定(例如,字符串中的宏名称),还可能带有假否定(例如,当宏的名称是通过连接标识符生成时,在宏中应用的宏)