@Noortvel

Есть ли парсер для header файлов(С++)?

Есть ли на С++ готовый парсер header фалов?(Аля Reflection в C#)
Т.е скормил парсеру файл, а он возвращает класс, всех его членов(функции, переменные и т.д)?
P.S наверно можно просто из headra(сырой) в текстовый файл.
Аля:
//SomeHeader.h
class someclass
{
private:
   int somevar;
public:
   void someFunc(float a);
   int someFunc2();
   bool s;
}

А в текстовом файле
someclass:
    public:
    name : "someFunc"{
    type: "func"{
    varType: "void"
    argCount: "1"
    argType: "float"
    argName: "a"
   }
   }
   name:"s"{
   type:"var" {
   varType:"bool"
   }
   }
    // И т.д
  • Вопрос задан
  • 318 просмотров
Пригласить эксперта
Ответы на вопрос 3
Adamos
@Adamos
Оптимизирующий компилятор может превратить то, что расписано в этом заголовочном файле, в стопроцентную фикцию, не имеющую в программе вообще никакого представления. К чему вы собрались обращаться, если функция, например, развернута в inline и вообще не имеет точки вызова?
Ответ написан
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Сейчас популярный подход - собирать сами типы уже с метаданными с помощью препроцессинга (Qt с его плагинами) или шаблонов (грибные фантазии, вроде этой). Кое-что можно узнать из type traits современных стандартов.

Но как-то что-то подгружать в рантайме заведомо неизвестное (не обладающее известным интерфейсом), особенно с виртуальными функциями - это вряд ли.
Ответ написан
Комментировать
Rou1997
@Rou1997
Т.е скормил парсеру файл, а он возвращает класс, всех его членов(функции, переменные и т.д)?

Он не может просто так загружать файл и возвращать именно класс, поскольку C/C++ компилируемый язык, более того, даже в C# и Java можно загрузить только скомпилированный байт-код, полноценного eval нет и там, получается нужно еще сперва программно скомпилировать код, при этом "обманув" компилятор чтобы не "ругался" на зависимости, скорее всего генерацией "заглушек", но работ по такой "частичной" компиляции никто не проводил, тем более для C++ с его сложным синтаксисом, а жаль, хороший бы инструмент для реверс-инжиниринга получился.
Если же вас устроит получение просто информации о классе и членах, то обычно такую структуру называют AST деревом, для этого есть разные парсеры, очевидно что это есть в компиляторах и IDE, но в STL и стандарт "C" ничего такого не входит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы