pointers_to_members pragma

C++ 固有

クラス メンバーへのポインターを、関連付けられたクラス定義の前に宣言できるかどうかを指定します。 ポインターのサイズと、ポインターを解釈するために必要なコードを制御するために使用されます。

構文

#pragma pointers_to_members( best_case )
#pragma pointers_to_members( full_generality [ , most-general-representation ] )

解説

ソース ファイルに pointers_to_memberspragma を配置できます。これは、/vmb または /vmg/vmm/vms/vmv の各コンパイラ オプションまたは Microsoft 固有の継承キーワードを使用する代替手段にできます。

pointer-declaration 引数は、関連付けられた関数定義の前または後にメンバーへのポインターを宣言したかどうかを指定します。 pointer-declaration 引数は、次の 2 つのシンボルの 1 つです。

  • 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_memberspragma は、影響を与えるソース コード ファイル内のみに指定し、必ず #include ディレクティブの後に配置することをお勧めします。 これにより、pragma が他のファイルに影響を与えるリスクが減少すると共に、同じ変数、関数、またはクラス名に誤って複数の定義を指定するリスクが減少します。

//   Specify single-inheritance only
#pragma pointers_to_members( full_generality, single_inheritance )

END C++ 固有

関連項目

Pragma ディレクティブと __pragma キーワードと _Pragma キーワード