代码之家  ›  专栏  ›  技术社区  ›  Indiana Kernick Michael Durrant

如何生成宏的所有事件的列表?

  •  0
  • Indiana Kernick Michael Durrant  · 技术社区  · 6 年前

    我有一些 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”}
    );
    

    元组中元素的顺序无关紧要。我还必须手动包含所有包含 声明。

    我可以编写一个Python脚本,在构建时生成文件,但是如果可能的话,我希望使用预处理器来完成这项工作。我不认为这是可能的,但我看到人们做一些疯狂的东西与预处理器,所以我想我问。我不了解宏元编程以及我了解模板元编程。

    1 回复  |  直到 6 年前
        1
  •  0
  •   einpoklum    6 年前

    你的两个行动方案是:

    1. 使用编译器的前端来获得预处理语法树(clang)可以让您做到这一点;对GCC不太确定)

    选项1的工作量要大得多(除非您可以调整另一个现有的工具),但要精确;选项2不需要太多的努力,但是如果不“重新发明轮子”的话,它是非常不准确的-带有误报(例如字符串中的宏名称),也可能是误报(例如,在宏中应用的宏,其名称是通过连接标识符生成的)。