本文将结合笔者的项目经验, 介绍如何在C#中用一种逐层处理的方式完成前文中提到的反射注册信息的自动生成的.
1....}
}
}
}
}
注意unsafe和fixed关键字的使用, P/Invoke封装通过对非安全的指针的使用, 弱化c++与C#的差异, 使相关的结构体..., 默认宏会直接被展开, 生成的AST里不包含这部分内容....当然, 考虑到业务层使用的规整性, 我们使用宏对annotate做了一些包装:
#if defined(CLANG_GENERATOR)
#define RSTUDIO_META_KEYWORD_SEPARATOR_INTERNAL...另外, 为了避免对代码的干扰, 我们只有在CLANG_GENERATOR宏被声明的情况下, 对应的宏才会被解释成annotate, 否则定义的宏则是一个空实现.