2

我在 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;

4

2 回答 2

1

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

如果你真的想做你所要求的,实际上,你必须编写一个解析器来解析 C++ 结构定义,并弄清楚 LLVM 如何在内存中布置这样的结构。但是,这可能不是您真正想要做的。

您在这里要解决的更大问题是什么?听起来好像您可以使用模板来做您想做的事——沿着这些思路:

template <class T>
int magic(T a, T b)
{
    return a.x + b.x;
}
于 2010-04-04T07:42:18.887 回答
1

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

于 2010-04-07T09:03:45.423 回答