#pragma ishome ディレクティブは、 指定したクラスのホーム・モジュールが現行のコンパイル単位であることをコンパイラーに通知します。 ホーム・モジュールは、 仮想関数テーブルなどの項目が保管されている場所です。 項目は、コンパイル単位の外側から参照されると、 そのホームの外部には生成されません。 これによりアプリケーションに対して生成されるコードの量を削減することができます。
>>-#--pragma--ishome--(--className--)--------------------------><
ここで、
className | ホームが現行のコンパイル単位になるクラスのリテラル名です。 |
一致する #pragma hashome を持たない #pragma ishome がある場合は、警告が出されます。
以下の例では、コード・サンプルをコンパイルすると仮想関数テーブルと、コンパイル単位 a.o のみの S::foo() の定義が生成されます (b.o 用はありません)。これによりアプリケーションに対して生成されるコードの量が削減されます。
// a.h struct S { virtual void foo() {} virtual void bar(); }; // a.C #pragma ishome(S) #pragma hashome (S) #include "a.h" int main() { S s; s.foo(); s.bar(); } // b.C #pragma hashome(S) #include "a.h" void S::bar() {}
関連情報