假设我有 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 许可协议
TR;博士
.cpp
文件是一个单独的翻译单元,.ipp
包含在标题中,并进入包括该标题在内的所有翻译单元。解释
在模板之前,您将方法的声明放在头文件中,然后实现转到
.cpp
文件。这些文件被单独编译为它们自己的编译单元。使用模板,这不再可能几乎所有模板方法都需要在标头中定义。为了至少在逻辑层面上将它们分开,有些人将声明放在标题中,但将模板方法的所有实现移动到
.ipp
文件(i
用于“内联”)并包括.ipp
文件头末尾的文件。