假设我有一个枚举定义,例如:
// myenum.h
enum MyEnum {
First = 1,
Second,
Third,
TwoAgain = Second
};
我想以编程方式从任何给定的枚举定义生成映射,其中键是枚举元素的名称,值是枚举元素的数值(例如myMap["TwoAgain"] == 2
)
到目前为止,我知道如何使用 遍历源文件clang_visitChildren()
,并使用clang_tokenize()
. 通过 AST 递归,我按以下顺序获取游标/标记:
- “我的枚举”(CXType_Enum)
- “第一”(CXToken_Identifier)
- "=" (CXToken_Punctuation)
- "1" (CXToken_Literal)
- “无符号整数”(CXType_UInt)
- "1" (CXToken_Literal)
- “我的枚举”(CXType_Enum)
- “第二”(CXToken_Identifier)
- “我的枚举”(CXType_Enum)
- “第三”(CXToken_Identifier)
- “我的枚举”(CXType_Enum)
- "TwoAgain" (CXToken_Identifier)
- "=" (CXToken_Punctuation)
- “第二”(CXToken_Identifier)
- “无符号整数”(CXType_UInt)
- “第二”(CXToken_Identifier)
我想我可以编写一个算法,使用这些信息来计算每个值。但是,我想知道是否有更简单的方法?我可以直接从 libclang API 获取数值吗?