llvm clang struct создание функций на лету - PullRequest
2 голосов
/ 04 апреля 2010

Я использую LLVM-clang в Linux.

Предположим, в 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 ]

1 голос
/ 07 апреля 2010

Если вы действительно хотите заниматься такими вещами, вам нужно связать весь CLang и научиться использовать его сложный и постоянно меняющийся API. Вы так уверены, что вам это действительно нужно?

1 голос
/ 04 апреля 2010

C ++, будучи скомпилированным языком (обычно), не может делать то, что вы от него хотите, потому что во время выполнения компилятора больше нет, чтобы выполнять тот разбор и создание кода, которые вам понадобятся для вашего magic функция. В этом принципиальное отличие компилируемых и интерпретируемых языков.

Если вы действительно хотите сделать то, что вы просите, вам, по сути, придется написать синтаксический анализатор, который может анализировать определения структур C ++ и понять, как LLVM размещает такую ​​структуру в памяти , Однако это, вероятно, не совсем то, что вы хотите сделать.

Какую большую проблему вы пытаетесь решить здесь? Звучит так, как будто вы можете использовать шаблоны, чтобы делать то, что вы хотите - по следующим направлениям:

template <class T>
int magic(T a, T b)
{
    return a.x + b.x;
}
...