2012-04-12 102 views
1

模板类的实现必须包含在定义它的头文件中。这种类的实现应该在课堂上还是定期进行(就像你对其他课程所做的那样),而只是在头文件中完成?C++:模板实现(代码样式)

我与常规方法的问题是,实施变得非常臃肿,因为您需要将模板定义面前。我想知道哪个是最常用的方法。

+0

代码风格的问题不就这么走了。 – ildjarn 2012-04-12 21:17:24

+0

如果知道所有将被实例化的类型,那么该实现可以位于cpp文件中,然后在该.cpp文件中将其实例化。 – 2012-04-12 22:32:52

+0

可能的重复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

回答

1

可能是最常见的方式是编写类的定义,然后写在执行另一个文件,然后#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 
} 
+0

我通常看到后缀'.inl',但只要它不是'.h'和'.cpp',它就不重要了。 – 2012-04-12 21:27:25

+0

Boost在此场景中使用'.ipp'。 – ildjarn 2012-04-12 22:53:38