pointers_to_members
pragma
Специфика C++
Указывает, можно ли объявлять указатель на член класса до определения связанного класса. Используется для управления размером указателя и кодом, необходимым для интерпретации указателя.
Синтаксис
#pragma pointers_to_members( best_case )
#pragma pointers_to_members( full_generality
[ ],
most-general-representation
)
Замечания
Исходный файл можно поместить в качестве альтернативы использованию /vmb
параметров компилятора или /vmg
/vmm
/vms
/vmv
параметров компилятора или ключевых слов наследования майкрософт.pointers_to_members
pragma
Аргумент объявления указателя указывает, объявлен ли указатель на элемент до или после связанного определения функции. Аргумент pointer-declaration
является одним из следующих двух символов:
full_generality
Создает безопасный, но не всегда оптимальный код. Используйтеfull_generality
, если любой указатель на элемент объявлен до определения связанного класса. Этот аргумент всегда использует представление указателя, указанное аргументомmost-general-representation
. Эквивалент/vmg
.best_case
Создает оптимальный код, используя лучшее представление для всех указателей на элементы. Требуется определить класс перед объявлением указателя на член. Значение по умолчанию —best_case
.
Аргумент most-general-representation
указывает наименьшее представление указателя, которое компилятор должен использовать для безопасной ссылки на любой указатель на член класса в модуле перевода. Аргумент может быть одним из следующих значений:
single_inheritance
Наиболее общим представлением является однонаследование, указывающего на функцию-член. Эквивалент/vmg /vms
. Вызывает ошибку, если модель наследования определения класса является несколькими или виртуальными.multiple_inheritance
Наиболее общим представлением является указатель на функцию-член с несколькими наследованиями. Эквивалент/vmg /vmm
. Вызывает ошибку, если модель наследования определения класса является виртуальной.virtual_inheritance
Наиболее общим представлением является указатель на функцию-член виртуального наследования. Эквивалент/vmg /vmv
. Никогда не вызывает ошибку.virtual_inheritance
— это аргумент по умолчанию при#pragma pointers_to_members(full_generality)
использовании.
Внимание
Мы советуем поместить pointers_to_members
pragma только в файл исходного кода, который вы хотите повлиять, и только после каких-либо #include
директив. Эта практика снижает риск, который pragma повлияет на другие файлы, и вы случайно укажедите несколько определений для одной переменной, функции или имени класса.
Пример
// Specify single-inheritance only
#pragma pointers_to_members( full_generality, single_inheritance )
END C++ Specific