tutorial nativos metodos ejemplos java c++ annotations

java - nativos - jni tutorial



Anotaciones similares a Java en C++ (4)

¿Hay algo como las anotaciones de Java en C ++?

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

Estoy buscando algo como esto en C ++.


C ++ 11 proporciona soporte para "atributos generalizados", que pueden verse como un superconjunto de las anotaciones de Java, ya que pueden aplicarse mot solo a variables / funciones, pero también a declaraciones, por ejemplo. Pero C ++ 11 define solo la sintaxis de los atributos generalizados, no un medio para que el usuario los defina.

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

GCC admite esta función desde 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, los complementos del compilador son prometedores, especialmente basados ​​en la integración de lenguaje de alto nivel, como https://fedorahosted.org/gcc-python-plugin/


Hay C ++ 0x, que tiene la anulación ''anotación''. O, si deseaba obtener más de la "interfaz" de código similar que los errores si no implementa los métodos, podría usar 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 generará un error de compilación si no anula foo en la clase base. El problema, sin embargo, es que la clase base no puede tener su propia implementación.


No hay nada 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.


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