我在Linux上使用LLVM-clang。
假设在foo.cpp中我有:
struct Foo {
int x, y;
};
如何创建一个“魔术”功能:
typedef (Foo) SomeFunc(Foo a, Foo b);
SomeFunc func = magic("struct Foo { int x, y; };");
这样:
func(SomeFunc a, SomeFunc b); // returns a.x + b.y;
注意:
所以基本上,“魔术”需要一个char*
,让LLVM解析它以获得C ++如何布局结构,然后创建一个返回a.x + b.y;
的函数
答案 0 :(得分:1)
C ++,作为一种编译语言(通常),不能做你想做的事情,因为在运行时,编译器不再需要为你的{需要进行解析和代码创建。 {1}}功能。这是编译语言和解释语言之间的根本区别。
如果真的希望按照你的要求去做,那么你实际上必须编写一个解析器来解析C ++结构定义并弄清楚LLVM如何构建这样的结构记忆。但是,这可能不是你想要做的。
你想在这里解决的更大问题是什么?听起来好像你可以使用模板来做你想做的事情 - 沿着这些方向:
magic
答案 1 :(得分:1)
如果你真的想要做这种事情,你必须链接整个CLang,并学习如何使用其复杂且不断变化的API。你确定你真的需要吗?