13

1 つの .ipp 拡張ファイルと 1 つの main.cpp ファイルの 2 つのヘッダー ファイルがあるとします。

最初のヘッダー ファイル (Java のインターフェイスのようなもの):

template<class T>

class myClass1{

public:


    virtual int size() = 0;

};

2 番目のヘッダー ファイル:

#include "myClass1.h"



    template<class T>

    class myClass2 : public myClass1<T>

     public:



    {

          virtual int size();


     private:

         int numItems;

    };

    #include "myClass2.ipp"

そして、私の myClass2.ipp ファイルです:

template <class T>
int myClass2<T>::size()
{

  return numItems;
}

最後の1つは私のメインです:

#include "myclass2.h"
void tester()
{
  myClass2<int> ForTesting;
  if(ForTesting.size() == 0)
  {
    //......
  } 
  else 
  {
   //.....
  }
}

int main(){

   tester();
   return 0;

}

myClass1、myClass2、および myClass2.ipp はヘッダー ファイルに属します。ソース ファイルの main.cpp。.h ファイルと .cpp ファイルだけを使用する代わりに、この方法を使用してプログラムを実装する利点は何ですか? .ipp 拡張子ファイルとは何ですか? .ipp と .cpp の違いは?

4

3 に答える 3

29

TR;DR

.cppファイルは別個の翻訳単位であり、.ippヘッダーからインクルードされ、そのヘッダーを含むすべての翻訳単位に入ります。

説明

テンプレートの前に、メソッドの宣言をヘッダー ファイルに入れ、実装をファイルに書き込んでいました.cpp。これらのファイルは、独自のコンパイル単位として個別にコンパイルされました。

テンプレートでは、これはもはや不可能であり、ほとんどすべてのテンプレート メソッドをヘッダーで定義する必要があります。少なくとも論理レベルでそれらを分離するために、一部の人々は宣言をヘッダーに入れますが、テンプレートメソッドのすべての実装を.ippファイル ( i「インライン」の場合) に移動し.ipp、ヘッダーの最後にファイルを含めます。

于 2013-10-02T21:38:27.170 に答える