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_members
pragma 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. Usefull_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 argumentomost-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 esbest_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_members
pragma 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