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
-
指定 MIDL 支援的 C 語言運算式。 幾乎支援所有的 C 語言運算式。 MIDL 編譯器支援條件運算式、邏輯運算式、關聯運算式和算術運算式。 MIDL 不允許運算式中的函式調用,而且不允許遞增前和後置遞減運算子。
-
field-attr-list
-
指定套用至等位成員的零個或多個欄位屬性。 有效的欄位屬性包括[first_is]、[last_is]、[length_is]、[max_is]、[size_is];使用屬性[string]、 [ignore], 和[coNtext_handle];指標屬性[ref]、[unique]或[ptr];和 對於本身為等位的成員,聯集屬性[switch_type] 。 以逗號分隔多個欄位屬性。
-
union-type-specifier
-
指定 等位 類型識別碼。 選擇性儲存體規格可以位於 類型規範之前。
-
宣告子和宣告子清單
-
指定標準 C 宣告子,例如識別碼、指標宣告子和陣列宣告子。 (函式宣告子和位欄位宣告不允許在遠端程序呼叫中傳輸的等位。這些宣告子允許在未傳輸的等位中。) 以逗號分隔多個宣告子。
-
function-attribute-list
-
指定套用至函式的零個或多個屬性。 有效的函式屬性為[callback], [local];指標屬性[ref]、[unique]或[ptr];和使用屬性[string]、[ignore]和[coNtext_handle]。
-
type-specifier
-
pointer-declarator
-
指定零個或多個指標宣告子。 指標宣告子與 C 中使用的指標宣告子相同;它是由 * 指示項、 遠方修飾詞和限定詞 常數所建構。
-
function-name
-
指定遠端程式的名稱。
-
param-attr-list
-
指定零個或多個適用于指定參數類型的屬性。 參數屬性可以採用方向屬性[in]和[out]、欄位屬性[first_is]、[last_is]、[length_is]、[max_is]、[size_is]和[switch_type];指標屬性[ref]、[unique]或[ptr];和使用量屬性[coNtext_handle]和[string]。 使用屬性 [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;