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;

См. также раздел

Базовые типы MIDL

Обратного вызова

const

context_handle

Инкапсулированные объединения

Перечисления

first_is

Игнорировать

last_is

length_is

Местных

max_is

Некапсулированные объединения

Ptr

Ref

size_is

строка

Структура

switch_type

union

Уникальный