pointers_to_members pragma

Específico de C++

Especifica si un puntero a un miembro de una clase se puede declarar antes de su definición de clase asociada. Se usa para controlar el tamaño del puntero y el código necesario para interpretar el puntero.

Sintaxis

#pragma pointers_to_members( best_case )
#pragma pointers_to_members( full_generality [ ,most-general-representation ] )

Comentarios

Puede colocar un elemento pointers_to_memberspragma en el archivo de código fuente como alternativa al uso de las opciones del compilador /vmb o /vmg y /vmm, /vms, /vmv o las palabras clave de herencia específicas de Microsoft.

El argumento pointer-declaration especifica si se ha declarado un puntero a un miembro antes o después de la definición de función asociada. El argumento pointer-declaration es uno de estos dos símbolos:

  • full_generality
    Genera código seguro, a veces no optimo. Use full_generality si un puntero a un miembro se declara antes de la definición de clase asociada. Este argumento siempre usa la representación de puntero especificada por el argumento most-general-representation. Equivalente a /vmg.

  • best_case
    Genera código óptimo que usa la representación best-case de todos los punteros a miembros. Requiere que defina la clase antes de declarar un puntero a un miembro. El valor predeterminado es best_case.

El argumento most-general-representation especifica la representación del puntero más pequeño que el compilador puede usar para hacer referencia de forma segura a cualquier puntero a un miembro de una clase en una unidad de traducción. El argumento puede ser uno de estos valores:

  • single_inheritance
    La representación más general es single-inheritance, puntero a una función miembro. Equivalente a /vmg /vms. Produce un error si el modelo de herencia de una definición de clase es múltiple o virtual.

  • multiple_inheritance
    La representación más general es multiple-inheritance, puntero a una función miembro. Equivalente a /vmg /vmm. Produce un error si el modelo de herencia de una definición de clase es virtual.

  • virtual_inheritance
    La representación más general es virtual-inheritance, puntero a una función miembro. Equivalente a /vmg /vmv. Nunca produce un error. virtual_inheritance es el argumento predeterminado cuando se usa #pragma pointers_to_members(full_generality).

Precaución

Se aconseja colocar la directiva pointers_to_memberspragma solo en el archivo de código fuente al que quiere que afecte, y solo después de directivas #include. Esta práctica reduce el riesgo de que la pragma afecte a otros archivos, y de que especifique por error varias definiciones para la misma variable, función o nombre de clase.

Ejemplo

//   Specify single-inheritance only
#pragma pointers_to_members( full_generality, single_inheritance )

END C++ específico

Consulte también

Directivas pragma y las palabras clave __pragma y _Pragma