C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++テンプレートをヘッダーファイルにのみ実装できるのはなぜですか?


C ++でテンプレートをインスタンス化すると、コンパイラは新しいクラスを作成します。このクラスには、テンプレート引数を配置したすべての場所が、使用時に渡す実際の引数に置き換えられています。 の場合 −

template<typename T> class MyClass {
   T foo;
   T myMethod(T arg1, T arg2) {
      // Impl
   }
};

そして、プログラムのどこかでこのクラスを使用してください。

MyClass<int> x;

コンパイラは、渡した型引数ごとにこれに遭遇すると、新しいクラスを作成します。たとえば、異なるテンプレート引数を使用して3つのオブジェクトを作成した場合、3つのクラスが取得されます。これは、-

と同等です。
class MyClassInt {
   int foo;
   int myMethod(int arg1, int arg2) {
      // Impl
   }
};

そのためには、コンパイラは、そのようなステートメントに遭遇する前に、クラスとメソッドの実装にアクセスして、テンプレート引数(この場合はint)でそれらをインスタンス化する必要があります。これらのテンプレートクラスの実装がヘッダーに含まれていない場合、アクセスできないため、コンパイルされません。



  1. HTMLファイルがソースモジュールからJavaScript関数を見つけられないのはなぜですか?

    これは、「export」ステートメントを使用していない場合に発生する可能性があります。スクリプトファイルにインポートされる関数の前に「エクスポート」を使用します。 JavaScriptファイルは次のとおりで、emo.jsという名前のファイルがあります。 demo.js console.log("function will import"); export function test(){    console.log("Imported!!!"); } 上記の関数をインポートする「index.html」ファイルは次のとおりで

  2. なぜC++が最高のプログラミング言語なのですか?

    C++は非常に強力な言語として知られています。 C ++を使用すると、コンピューターリソースの使用方法を細かく制御できるため、適切な方法で、リソースを安価に使用できる速度と機能は、他の言語を凌駕できるはずです。 C ++のパフォーマンスのおかげで、ゲームエンジン、ゲーム、デスクトップアプリの開発によく使用されます。多くのAAAタイトルのビデオゲームはC++で構築されています。 C ++の最大の強みは、C ++がいかにスケーラブルであるかということです。そのため、リソースを大量に消費するアプリは通常、C++を使用して構築されます。静的に型付けされた言語として、C ++は、コードが実行される前に