pointers_to_members
Específicos de C++
Especifica si un puntero a un miembro de una clase se puede declarar antes que su definición de clase asociada y se utiliza para controlar el tamaño de puntero y el código requerido para interpretar el puntero.
#pragma pointers_to_members( pointer-declaration, [most-general-representation] )
Comentarios
Puede colocar una pragma pointers_to_members en el archivo de código fuente como alternativa al uso de las opciones de compilador /vmx o las palabras clave de herencia.
El argumento pointer-declaration especifica si se ha declarado un puntero a un miembro antes o después que la definición de función asociada. El argumento pointer-declaration es uno de los dos símbolos siguientes:
Argumento |
Comentarios |
---|---|
full_generality |
Genera código seguro, a veces no optimo. Debe utilizar full_generality si un puntero a un miembro se declara antes que 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 seguro y óptimo que usa la representación best-case para todos los punteros a miembros. Requiere que se defina la clase antes de declarar un puntero a un miembro de la clase. El valor predeterminado es best_case. |
El argumento most-general-representation especifica la representación más pequeña de puntero que el compilador puede utilizar de forma segura para hacer referencia a cualquier puntero a un miembro de una clase en una unidad de traducción. El argumento puede ser uno de los siguientes:
Argumento |
Comentarios |
---|---|
single_inheritance |
La representación más general es single-inheritance, puntero a una función miembro. Produce un error si el modelo de herencia de una definición de clase para la que se declara un puntero a un miembro es múltiple o virtual. |
multiple_inheritance |
La representación más general es multiple-inheritance, puntero a una función miembro. Produce un error si el modelo de herencia de una definición de clase para la que se declara un puntero a un miembro es virtual. |
virtual_inheritance |
La representación más general es virtual-inheritance, puntero a una función miembro. Nunca produce un error. Este es el argumento predeterminado cuando se utiliza #pragma pointers_to_members(full_generality). |
Advertencia
Se aconseja colocar la pragma pointers_to_members solo en el archivo de código fuente al que desea 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 accidentalmente 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 )