模板类的实现必须包含在定义它的头文件中。这种类的实现应该在课堂上还是定期进行(就像你对其他课程所做的那样),而只是在头文件中完成?C++:模板实现(代码样式)
我与常规方法的问题是,实施变得非常臃肿,因为您需要将模板定义面前。我想知道哪个是最常用的方法。
模板类的实现必须包含在定义它的头文件中。这种类的实现应该在课堂上还是定期进行(就像你对其他课程所做的那样),而只是在头文件中完成?C++:模板实现(代码样式)
我与常规方法的问题是,实施变得非常臃肿,因为您需要将模板定义面前。我想知道哪个是最常用的方法。
可能是最常见的方式是编写类的定义,然后写在执行另一个文件,然后#include
在头文件底部的执行文件,并没有在文件列出它来编译。这样他们在不同的文件,但编译器是满意的,因为定义和声明是在预处理后在同一个文件。
例子:预处理完成
// header.h
template<typename T>
struct A {
int dostuff();
};
#include "header.template"
// header.template (not header.cpp, to make it clear that this doesn't get compiled)
template<typename T>
int A::dostuff() {
// do stuff
}
后,文件看起来像
template<typename T>
struct A {
int dostuff();
};
template<typename T>
int A::dostuff() {
// do stuff
}
我通常看到后缀'.inl',但只要它不是'.h'和'.cpp',它就不重要了。 – 2012-04-12 21:27:25
Boost在此场景中使用'.ipp'。 – ildjarn 2012-04-12 22:53:38
代码风格的问题不就这么走了。 – ildjarn 2012-04-12 21:17:24
如果知道所有将被实例化的类型,那么该实现可以位于cpp文件中,然后在该.cpp文件中将其实例化。 – 2012-04-12 22:32:52
可能的重复http://stackoverflow.com/questions/8662517/do-template-class-member-function-implementations-always-have-to-go-in-the-heade/8662746#8662746 – 2012-04-13 05:09:40