switch_is - атрибут
Атрибут [switch_is] указывает выражение или идентификатор, выступающий в качестве дискриминанта объединения, который выбирает член объединения.
typedef struct [[ struct-tag ]]
{
[ switch_is(limited-expr) [[ , field-attr-list ]] ] union-type-specifier declarator;
...
}
[[ [function-attribute-list] ]] type-specifier [[pointer-declarator]] function-name(
[ switch_is(limited-expr) [[ , param-attr-list ]] ] union-type [[declarator]]
, ...);
-
struct-tag
-
Указывает необязательный тег для структуры.
-
limited-expr
-
Указывает выражение языка C, поддерживаемое MIDL. Поддерживаются почти все выражения языка C. Компилятор MIDL поддерживает условные выражения, логические выражения, реляционные выражения и арифметические выражения. MIDL не разрешает вызовы функций в выражениях и не допускает операторы до и после приращения, а также операторы до и после декремента.
-
field-attr-list
-
Указывает ноль или несколько атрибутов поля, которые применяются к члену объединения. Допустимые атрибуты полей: [first_is], [last_is], [length_is], [max_is], [size_is]; атрибуты использования [string], [ignore] и [context_handle]; атрибут указателя [ref], [unique], или [ptr]; и для членов, которые сами являются профсоюзами, атрибут union [switch_type]. Разделяйте несколько атрибутов полей запятыми.
-
описатель union-type-specifier
-
Указывает идентификатор типа объединения . Необязательная спецификация хранилища может предшествовать описательу типа.
-
декларатор и список деклараторов
-
Указывает стандартный декларатор C, например идентификатор, декларатор указателя и декларатор массива. (Деклараторы функций и объявления битовых полей не допускаются в объединениях, передаваемых в удаленных вызовах процедур. Эти деклараторы разрешены в объединениях, которые не передаются.) Разделяйте несколько деклараторов запятыми.
-
function-attribute-list
-
Указывает ноль или несколько атрибутов, применяемых к функции. Допустимые атрибуты функции: [callback], [local]; атрибут указателя [ref], [unique], или [ptr]; и атрибуты использования [string], [ignore] и [context_handle].
-
type-specifier
-
Указывает базовый тип, структуру, объединение, тип перечисления или идентификатор типа. Необязательная спецификация хранилища может предшествовать описательу типа.
-
указатель-декларатор
-
Указывает ноль или несколько деклараторов указателей. Декларатор указателя совпадает с декларатором указателя, используемым в C; он создается из конструктора *, модификаторов, таких как far, и const квалификатора.
-
function-name
-
Указывает имя удаленной процедуры.
-
param-attr-list
-
Указывает ноль или более атрибутов, подходящих для указанного типа параметра. Атрибуты параметров могут принимать атрибуты направления [in] и [out], атрибуты полей [first_is], [last_is], [length_is], [max_is], [size_is] и [switch_type]; атрибут указателя [ref], [unique], или [ptr]; и атрибуты использования [context_handle] и [строка]. Атрибут использования [ignore] нельзя использовать в качестве атрибута параметра. Разделяйте несколько атрибутов запятыми.
-
union-type
-
Идентифицирует описатель типа объединения .
Дискриминант, связанный с атрибутом [switch_is] , должен быть определен на том же логическом уровне, что и объединение:
- Если объединение является параметром, дискриминант объединения должен быть другим параметром.
- Если объединение является полем структуры, дискриминант должен быть другим полем той же структуры.
Последовательность в структуре или списке параметров функции не имеет значения. Объединение может предшествовать дискриминанту или следовать за ней.
Атрибут [switch_is] может отображаться как атрибут поля или атрибут параметра.
typedef [switch_type(short)] union _WILLIE_UNION_TYPE
{
[case(24)]
float fMays;
[case(25)]
double dMcCovey;
[default]
;
} WILLIE_UNION_TYPE;
typedef struct _WINNER_TYPE
{
[switch_is(sUniformNumber)] WILLIE_UNION_TYPE w;
short sUniformNumber;
} WINNER_TYPE;