2011-01-14 14 views
25

¿Hay algo así como las anotaciones de Java en C++?Anotaciones Java-like en C++

Por ejemplo, la anotación @Override marca una función que anula otra función, y si no lo hiciera, daría un error en tiempo de compilación.

Estoy buscando algo como esto en C++.

Respuesta

8

C++0x tendrá esta característica, donde puede especificar explícitamente si una función miembro debe anular la función de una clase base, usar una implementación predeterminada generada por el compilador y mucho más.

+2

Ahora que se ha lanzado C++ 11, ¿hay alguna documentación que describa esta característica? –

+1

Además, ¿a qué característica se refiere específicamente? –

+0

Simplemente haga clic en el enlace C++ 0x anterior, lo lleva exactamente a esa sección en los documentos de wikipedia. – Ruben

1

Hay C++ 0x, que tiene la anulación 'anotación'. O, si se quería lograr más de la "interfaz" de Java como de código que los errores si no se implementa métodos, que podrían utilizar una clase abstracta:

class Base { 
public: 
    virtual void foo() = 0; 
}; 

class Extended : public Base { 
public: 

    void foo2() { 
     cout << "hi" << endl; 
}; 

int main() { 
    Extended e; 
    e.foo(); 
} 

Esto dará lugar a un error de compilación si no anule a foo en la clase base. El problema, sin embargo, es que la clase base no puede tener su propia implementación.

0

No hay palabras en el idioma para esto. Lo mejor que puedes esperar es una opción específica del compilador. Comenzaría revisando la documentación de "pragma" para su compilador.

16

C++ 11 proporciona soporte para "atributos generalizados", que se pueden ver como superconjunto de anotaciones Java, ya que se pueden aplicar mot solo a variables/funciones, pero también a instrucciones, por ejemplo. Pero C++ 11 define solo la sintaxis para los atributos generalizados, no los medios para que el usuario los defina.

Este artículo da una buena visión de conjunto de atributos generalizadas: http://www.codesynthesis.com/~boris/blog/2012/04/18/cxx11-generalized-attributes/

GCC soporta esta característica de la versión 4.8, de acuerdo con http://gcc.gnu.org/projects/cxx0x.html

Para implementar el soporte para los atributos definidos por el usuario, plugins del compilador son prometedores, especialmente basa en integración de lenguaje de alto nivel, como https://fedorahosted.org/gcc-python-plugin/

+0

¡eso es lo más parecido a una anotación que he visto hasta ahora! Gracias por esta útil respuesta – bquenin