2008-12-14 8 views
9

escribo esta pequeña C++ ejemplo en Eclipse 3.4.1 (CDT 5.0.1):¿Cómo puedo hacer correctamente el auto-sangrado Eclipse CDT cuando uso BOOST_FOREACH?

#include <iostream> 
#include <vector> 
#include <boost/foreach.hpp> 

int foo() 
{ 
    std::vector<int> numbers; 
    BOOST_FOREACH(int n, numbers) 
    { 
    std::cout << n << std::endl; 
    } 
    std::cout << numbers.size << std::endl; 
} 

Entonces me golpeó Shift + Ctrl + F para formatear mi código, y se convierte en:

#include <iostream> 
#include <vector> 
#include <boost/foreach.hpp> 

int foo() 
{ 
    std::vector<int> numbers; 
    BOOST_FOREACH(int n, numbers) 
{ std::cout << n << std::endl; 
} 
std::cout << numbers.size << std::endl; 
} 

Esto es con el estilo de código BSD/Allman. Otros estilos obviamente varían el aspecto del código formateado, pero ninguno da la sangría correcta.

Cuando uso la función de formato en un fragmento de código más grande, las funciones o métodos posteriores también se ven afectados por una pequeña sangría, lo que hace que el formato no sea útil.

¿Hay algo que pueda hacer para que la sangría funcione correctamente con BOOST_FOREACH?

+0

¿Alguna vez solucionó esto? El plugin de Astyle es un IMO inferior porque alinea los argumentos de la función demasiado a la derecha. – Dave

+1

Nunca resolví esto. Tenga en cuenta que tampoco he trabajado en este proyecto en versiones más recientes de Eclipse. –

+1

¿es posible decirle a eclipse que 'BOOST_FOREACH' debe formatearse como una instrucción' while'? – Jayen

Respuesta

0

Euh ... ¿no puedes? Probar la próxima versión de CDT ...: _ (

+0

Estoy de acuerdo, comentario eliminado. Debería haber leído más, aplicaciones. – Emile

1

extraño, esto solía trabajar con CDT 4. Así que si realmente necesita este le sugiero que degradar su CDT: -/

+0

¿Quizás el formateador se volvió demasiado inteligente? –

2

Es posible que desee probar . la astyle eclipse plugin parece ser mucho mejor que el estilo del eclipse por defecto de la sangría C++

3

añadir esto a alguna cabecera utilizada por su código:.

#ifdef __CDT_PARSER__ 
    #undef BOOST_FOREACH 
    #define BOOST_FOREACH(a, b) for(a; ;) 
#endif 
+1

Dependiendo de cómo esté configurado su proyecto para compilar (es decir, si la configuración de Eclipse no se pasa realmente a su compilador), también puede configurar esto en "C/C++ General-> Rutas y símbolos-> Símbolos" en el proyecto propiedades. Defina un símbolo de C++, "BOOST_FOREACH (a, b)" a "for (a;;)", y permita que vuelva a indexar. –

+0

Con el último CDT (20120920-0800) ninguno de estos funciona. – Catskul

2

todavía se rompió en la corriente CDT de Kepler. Pero hay un error en Bugzilla de Eclipse (verifique su estado here). Eventualmente se arreglará :-)

Cuestiones relacionadas