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_members
pragma は、影響を与えるソース コード ファイル内のみに指定し、必ず #include ディレクティブの後に配置することをお勧めします。 これにより、pragma が他のファイルに影響を与えるリスクが減少すると共に、同じ変数、関数、またはクラス名に誤って複数の定義を指定するリスクが減少します。
例
// Specify single-inheritance only
#pragma pointers_to_members( full_generality, single_inheritance )
END C++ 固有