extern テンプレートを使用してテンプレートのインスタンス化を回避する
テンプレートのインスタンス化は C プログラミングの重要なステップであり、コンパイル時に特定のテンプレート インスタンスが作成されます。 。特定のシナリオでは、コンパイル時間を最適化し、冗長な定義を回避するために、テンプレートのインスタンス化を制御することが必要になります。ここで、extern template キーワードが登場します。
関数テンプレートの Extern テンプレート
関数テンプレートとともに使用すると、extern テンプレートは、指定された関数をインスタンス化しないようにコンパイラーに指示します。現在の翻訳単位内のテンプレート。これは、そのテンプレートのインスタンス化がプログラム内の他の場所で見つかることを示します。これは、複数のソース ファイルが同一のパラメータで同じテンプレートをインスタンス化し、コンパイラが複数の定義を破棄する必要があるシナリオで特に役立ちます。
例:
次のコード スニペット:
// header.h template <typename T> void f() { /* Body */} // source1.cpp #include "header.h" void something1() { f<int>(); } // source2.cpp #include "header.h" extern template void f<int>(); void something2() { f<int>(); }
この場合、source2.cpp の extern テンプレートはコンパイラーに次のことを通知します。 f
クラス テンプレートの Extern テンプレート
関数テンプレートと同様に、extern テンプレートも使用できます。クラステンプレートを使用します。これは、同じパラメータを持つテンプレート クラスの複数のインスタンス化を避けるために行われます。
例:
// header.h template <typename T> class MyClass { /* Body */} // source1.cpp #include "header.h" MyClass<int> obj1; // source2.cpp #include "header.h" extern template class MyClass<int>; MyClass<int> obj2;
ここでは、source2.cpp の extern テンプレートにより、 MyClass
extern テンプレートの使用に関するガイドライン
以上が「extern template」は C での冗長なテンプレートのインスタンス化をどのように防ぐことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。