template的头文件
时间: 2023-07-28 07:07:25 浏览: 43
当我们定义一个模板时,我们通常需要将其实现放在头文件中,因为模板的定义和实现都需要在编译期进行实例化,而头文件中的代码可以在编译时被包含在多个源文件中。
通常,我们可以将模板的声明放在头文件中,将模板的实现放在另一个源文件中,然后在需要使用模板的源文件中包含头文件即可。例如:
```c++
// stack.h
#ifndef STACK_H
#define STACK_H
#include <vector>
template<typename T>
class Stack {
public:
void push(T value);
T pop();
private:
std::vector<T> elems;
};
#include "stack_impl.h"
#endif
```
在头文件中,我们只需要定义模板的声明,然后在最后包含一个名为`stack_impl.h`的文件,其中包含模板的实现。
```c++
// stack_impl.h
#ifndef STACK_IMPL_H
#define STACK_IMPL_H
#include "stack.h"
template<typename T>
void Stack<T>::push(T value) {
elems.push_back(value);
}
template<typename T>
T Stack<T>::pop() {
T value = elems.back();
elems.pop_back();
return value;
}
#endif
```
在实现文件中,我们只需要包含头文件,并且定义模板的实现即可。
这样,当我们需要使用这个模板时,只需要包含头文件即可:
```c++
// main.cpp
#include "stack.h"
int main() {
Stack<int> s;
s.push(1);
s.push(2);
int a = s.pop();
int b = s.pop();
return 0;
}
```
这样就可以在`main`函数中使用通用的`Stack`模板了。