llvm clang struct动态创建函数

时间:2010-04-04 05:48:31

标签: c++ jit llvm

我在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;的函数

2 个答案:

答案 0 :(得分:1)

C ++,作为一种编译语言(通常),不能做你想做的事情,因为在运行时,编译器不再需要为你的{需要进行解析和代码创建。 {1}}功能。这是编译语言和解释语言之间的根本区别。

如果真的希望按照你的要求去做,那么你实际上必须编写一个解析器来解析C ++结构定义并弄清楚LLVM如何构建这样的结构记忆。但是,这可能不是你想要做的。

你想在这里解决的更大问题是什么?听起来好像你可以使用模板来做你想做的事情 - 沿着这些方向:

magic

答案 1 :(得分:1)

如果你真的想要做这种事情,你必须链接整个CLang,并学习如何使用其复杂且不断变化的API。你确定你真的需要吗?