Мне трудно создать плагин GCC (8.3.0).
Я пытаюсь определить виртуальный метод для пользовательского класса, используя некоторую информациюпредоставлено [[c ++ 11 :: attribute]]. Пока что я пытался сделать - прежде чем перейти к более сложным вещам - определить виртуальную функцию, которая дает следующие определения и код:
class Base
{
virtual void toJson() = 0;
}
class [[ns::object]] UserClass : public Base
{
[[ns::field]]
int a;
[[ns::field("beta")]]
int b;
int c;
[[ns::field]]
int d;
}
int main()
{
Base * obj = new UserClass;
obj->toJson();
return 0;
}
записывает фальшивый json в stdout
какthis:
{
"a": "value",
"beta": "value",
"d": "value"
}
Я могу зарегистрировать атрибуты и собрать информацию о пользовательском классе и его полях, но я не знаю, как внедрить объявление виртуального метода втип, ни как определить его тело. Я искал документацию по плагинам GCC (которая крайне плохая) и онлайн, но мне не повезло.
EDIT
Хорошо, поэтому мне удалось определить метод для данного класса, используя build_method_type_directly
и add_method
, но я не знаю, как определить тело метода. Любая помощь?