#pragma ishome

C++ のみ

説明

#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() {}

関連情報