使用 .ipp 扩展名和 .cpp 扩展名文件的区别

新手上路,请多包涵

假设我有 2 个头文件、1 个 .ipp 扩展文件和一个 main.cpp 文件:

第一个头文件 myClass1.h (类似于 Java 中的接口):

 template<class T>
class myClass1{
    public:
        virtual int size() = 0;
};

第二个头文件 myClass2.h

 #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;
}

最后一个是我的 main.cpp

 #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 之间的区别?

原文由 14K 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
1 个回答

TR;博士

.cpp 文件是一个单独的翻译单元, .ipp 包含在标题中,并进入包括该标题在内的所有翻译单元。

解释

在模板之前,您将方法的声明放在头文件中,然后实现转到 .cpp 文件。这些文件被单独编译为它们自己的编译单元。

使用模板,这不再可能几乎所有模板方法都需要在标头中定义。为了至少在逻辑层面上将它们分开,有些人将声明放在标题中,但将模板方法的所有实现移动到 .ipp 文件( i 用于“内联”)并包括 .ipp 文件头末尾的文件。

原文由 Daniel Frey 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题