El código fuente de nuestra aplicación es cientos de miles de líneas, miles de archivos y en lugares muy antiguos: la aplicación se escribió por primera vez en 1995 o 1996. En los últimos años, mi equipo ha mejorado mucho la calidad de la fuente , pero hay un problema que particularmente me molesta: muchas clases tienen muchos métodos completamente definidos en su archivo de encabezado.¿Herramienta para analizar fuentes C++ y mover los métodos en línea del encabezado al archivo fuente .cpp?
no tengo ningún problema con los métodos declarados en línea en un encabezado en algunos casos - el constructor de una estructura, un método simple donde inlining mensurable hace que sea más rápido (tenemos algunas funciones matemáticas como éste), etc. Sin embargo, el uso liberal de métodos inline sin razón aparente es:
- sucia
- hace que sea difícil encontrar la puesta en práctica de un método (especialmente buscando a través de un árbol de clases para una función virtual, sólo para encontrar una clase tuvo su versión declarado en el encabezado ...)
- Probablemente aumente el tamaño del código compilado
- Probablemente cause problemas para nuestro enlazador, que es notoriously flaky for large codebases. Para ser justos, ha mejorado mucho en los últimos años, pero no es perfecto.
Este último motivo ahora puede estar causando problemas para nosotros y es una buena razón para ir a través de la base de código y mover la mayoría de las definiciones al archivo fuente.
Nuestra base de código es enorme. ¿Existe alguna herramienta automatizada que pueda hacer (la mayoría de) esto por nosotros?
Notas:
- Utilizamos Embarcadero RAD Studio 2010. En otras palabras, el dialecto de C++ incluye VCL and other extensions, etc.
- Unos cabeceras son independientes, pero la mayoría están emparejados con un correspondiente. archivo cpp, como lo haría normalmente. Además de la extensión, el nombre de archivo es el mismo, es decir, si hay métodos definidos en X.h, se pueden mover a X.cpp. Esto también significa que la herramienta no tiene que manejar el análisis del proyecto completo; probablemente podría simplemente analizar pares individuales de archivos .cpp/.h, ignorar los elementos incluidos, etc., siempre que pueda reconocer de manera confiable un método con un cuerpo definido en una declaración de clase y moverlo.
http://stackoverflow.com/questions/6362995/c-refactoring-move-method-to-implementation-file duplicate? – Zuljin
Obtenga un interno para hacerlo. –
@Zuljin: hmm, posiblemente ... ¡Pero no hay respuestas aplicables! (VS complementos, sin indicación de cambios masivos en sus sitios web, y lo más votado de todos los comentarios y respuestas es algo que dice 'Oh, puedes crear fácilmente un guión ...' No creo 'fácil' y 'parse C++' normalmente van juntos!) –