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