【发布时间】:2014-03-28 10:06:27
【问题描述】:
我想生成一些基于 C++ 类型的包装器代码。我基本上是想解析一些C++头文件,获取头文件中定义的类型、类及其字段,并根据它们生成一些代码。
解析 C++ 和获取类型信息的最简单方法是什么?我曾想过使用 Clang C++ 解析器,但我无法在几个小时内创建一个正常工作的 hello world,所以我暂时放弃了。
您能否建议任何其他解析 C++ 的方法,或者如果 Clang 是最简单的解决方案,您能否指点我一个简单的入门指南,以便能够使用它解析 C++ 类型?
(基本上任何技术都可以,C++、Java、C# 等,这将是命令行工具的一部分)
【问题讨论】:
-
解析 C++ 绝非简单... SWIG 或 CLANG 可能是一个开始。
-
类型是迄今为止 C++ 语法中最复杂的部分,因此您不会在这里得到简单的解决方案。你必须使用真正的解析器。
-
Peter 说得对——你可以用几行正则表达式来做一些简单的事情——但请注意,随着时间的推移,维护你正在包装的标题的人很可能会出现并进行各种更改,例如决定一切都属于命名空间,或者模板应该从 typedef 切换到
using语句,或者应该使用元编程等选择参数 - 当黑客中断时,他们会不为所动。 -
@Mark:
template<typename T1,typename T2> auto f(T1 a, T2 b)->decltype(a+b) {return a+b}; auto x = f(3,2.0);。这是一个简单的 C++11 代码示例,需要完整解析才能获取变量类型。 -
一个“简单的标题”很可能包含
<string>,此时它真的不再简单了。
标签: c++ parsing clang code-generation