Для этого вам необходим полный анализатор синтаксического анализатора и имени C++, поскольку вам нужны не только объявления функций, но и контекст, который делает их четкими. Например, если у вас есть заявление
void foo<T>(...){ ... }
в файле, и есть тип T в файле, то лучше сохранить декларацию за Т, и все заявления, которые используются для определения T, и т.д. Таким образом, у вас есть сохраняйте в сети определения , поддерживающие foo ... и вам нужно решить, хотите ли вы сохранить те, которые поступают из файлов include или нет.
Наш DMS Software Reengineering Toolkit - это универсальный инструмент для анализа и преобразования программ общего назначения. С его C++ Front End можно проанализировать код C++ (включая #includes), построить абстрактные деревья синтаксиса (AST), разрешить имена и типы из коробки. Код настройки затем определит необходимую сеть ссылок и для каждой ссылки преобразует ее в подпись (вместо реализации), если необходимо, путем применения source-to-source program transformations к AST. Симпатичный принтер DMS может затем подготовить окончательный текст вывода.
DMS был использован для крупномасштабных разработок C++ (re) для других крупных проектов.
Конечно, вы всегда можете написать плохой взлом, чтобы имитировать это, если вы не возражаете против ответа, который вам, вероятно, придется заплатить вручную.
возможно дубликат [Искомый код заглушки генератора (из заголовочных файлов)] (HTTP: // StackOverflow .com/questions/2020568/seek-code-stub-generator-from-header-files) –
Поиск и замена '{' с ';/*' и '}' с помощью '* /' будет делать это, хорошее решение. – Pubby
@ Тим: Это наоборот, не? – Xeo