2012-02-29 19 views
6

Quizás una pregunta extraña, pero ¿hay algún software disponible que, dado un montón de código C++ 11, deriva todos los tipos de variables auto-tipadas y reescribe el código con esos tipos derivados? Y también para listas de inicializadores?Reescriba automáticamente palabra clave auto C++ 11 en tipos derivados

El razonamiento es que nos gustaría proporcionar una versión compatible hacia atrás de nuestro código (no C++ 11), principalmente para la portabilidad con osx. Las características que utilizamos más son listas de auto-tipado y de inicialización, ya que hacen que el código sea mucho más legible, pero eliminarlos a mano es un no-go. Como esto es de hecho lo que el compilador hace con las variables auto-tipadas, ¿no parece demasiado exagerado?

+1

libclang al rescate? – sehe

+0

¿Puedes elaborar @sehe? ¿El clang hace algo de esa manera? FYI, clang 3.0 no admite suficientes características en C++ 11 para compilar nuestro código. –

+1

@BroesDeCat: Sugirió que use la biblioteca de compiladores de Clang para compilar su código, y luego lo vuelva a escribir, con el 'auto' convertido a sus tipos deducidos. –

Respuesta

2

Si puede usar Boost, entonces puede consultar boost::typeof. No hará exactamente lo que auto hace, pero, en la mayoría de los casos, puede ser sustituido automáticamente a través de una búsqueda de expresiones regulares con capturas.

1

Suena como una función de un complemento de refactorización para Eclipse CDT (en realidad, lo propuse a mis alumnos hace algún tiempo). Puede ser el próximo trimestre. Puedo encontrar un equipo para crear tal. Sin embargo, la información de Eclipse CDT podría no ser lo suficientemente buena como para determinar siempre las cosas correctas.

Para algunas listas de iniciadores, por ejemplo, aquellas que llenan un vector, boost :: assign podría ser un reemplazo. Nuestra infraestructura de simulacro de objetos Mockator los usa para C++ 03 en lugar de listas de inicializadores en C++ 11.

No debe tenerle miedo a las bibliotecas de Boost, al menos no a las que vienen solo como encabezado. Aquellos que tienen partes separadas de la biblioteca pueden ser una molestia para configurar correctamente (la situación de la construcción ha mejorado últimamente).

Cuestiones relacionadas