2011-02-13 11 views
6

tal vez me haya perdido algo, pero me pregunto acerca de lo siguiente:¿Hay algún tipo de palabra clave de "atributo" en C++?

Al Mozilla Developer Pages about Coding Guidelines, leí lo siguiente:

Siempre que va a recuperar o establecer un solo valor sin ningún contexto, deberías usar atributos No use dos métodos cuando podría usar un atributo . El uso de atributos lógicamente conecta la obtención y el establecimiento de un valor , y hace que parezca un guión código más limpio.

Este ejemplo tiene demasiados métodos:

interface nsIFoo : nsISupports { 
    long getLength(); 
    void setLength(in long length); 
    long getColor(); 
}; 

El código siguiente generará la misma exacta C++ firma, pero es más guión de usar.

interface nsIFoo : nsISupports { 
    attribute long length; 
    readonly attribute long color; 
}; 

Lo que estoy pensando es el attribute long length. Supongo que esta sintaxis crea aucomáticamente métodos getter/setter.

  • ¿Pero es ese estándar-C++ de alguna manera?
  • ¿Esto es algo específico de Mozilla?
  • ¿Dónde se define esto?

Respuesta

12

Mozilla usa un lenguaje llamado IDL (lenguaje de definición de interfaz) para definir interfaces para objetos que se usan en contextos de varios idiomas, como C++ y JavaScript. Se compila en código en estos dos idiomas y, por lo tanto, permite a los desarrolladores que trabajan en el proyecto tener una única definición para sus interfaces en tantos idiomas como deseen. Entonces no, este no es el código estándar de C++; es algo completamente diferente.

En una nota relacionada, y la interfaz de sólo lectura no son C++ palabras clave tampoco. :-)

3

Este

interface nsIFoo : nsISupports { 
    attribute long length; 
    readonly attribute long color; 
}; 

es que Nterface D escripción L anguage (Se utiliza para C++ - Javascript interoperabilidad). Mozilla tiene una herramienta que genera código C++ para esto, con los métodos usuales getter y setter.

C++ en sí no tiene una palabra clave attribute.

5

Esta pauta de codificación se aplica a IDL, no C++, así que no, attribute no es parte de C++. Las directrices están tomando sobre las firmas de C++ que el IDL genera.

Cuestiones relacionadas