Para hacer esto con precisión, necesita un analizador de C++ completo y un sistema de resolución de nombres porque necesita no solo las declaraciones de funciones sino también el contexto que las define. Por ejemplo, si usted tiene una declaración
void foo<T>(...){ ... }
en el archivo, y hay un tipo T en el archivo, retener mejor la declaración de T, y todo lo que las declaraciones se utilizan para definir T, etc. Por lo que tiene Mantenga la web de definiciones compatibles con foo ... y debe decidir si desea mantener las que provienen de incluir archivos o no.
Nuestra DMS Software Reengineering Toolkit es un programa personalizable de análisis general de programas y maquinaria de transformación. Con su C++ Front End, se puede analizar el código de C++ (incluidos #includes), crear árboles de sintaxis abstracta (AST), resolver nombres y tipos de la caja. El código de personalización determinaría entonces la red de referencias necesaria, y para cada referencia, conviértala en una firma (en lugar de una implementación) si es necesario, aplicando source-to-source program transformations a los AST. La impresora bonita de DMS podría luego producir el texto de salida final.
DMS se ha utilizado para la ingeniería de C++ (re) a gran escala en otros grandes proyectos.
Por supuesto, siempre puedes escribir algún truco malo para simular esto, si no te importa una respuesta es probable que tengas que parchar a mano.
posible duplicado de [Buscando generador de código auxiliar (de los archivos de cabecera)] (http: // stackoverflow .com/questions/2020568/seek-code-stub-generator-from-header-files) –
Buscar y reemplazar '{' con ';/*' y '}' con '* /' lo hará, aunque no buena solución. – Pubby
@Tim: Eso es al revés, ¿no? – Xeo