目录
1、模板实现方式
模板实现方式有两种:
#include <vector>
template <typename T>
class Stack
{
public:
void Push(T val);
T Pop();
bool IsEmpty() const;
private:
std::vector<T> mStack;
};
// 使用
typedef Stack<int> IntStack;
IntStack* stack = new IntStack();
C预处理器模拟模板
#include <vector>
template <typename T>
class Stack
{
public:
void Push(T val);
T Pop();
bool IsEmpty() const;
private:
std::vector<T> mStack;
};
// 使用
typedef Stack<int> IntStack;
IntStack* stack = new IntStack();
利用C预处理器定义文本
缺点:
2、预处理器没有类型检查和作用域概念,只是简单的文本复制
除非不发使用模板,否则应该避免使用预处理器来模拟模板
特化
例如泛型的栈模板定义为Stack<T>,你可以为Stack<int>提供定制函数实现。
template<> void Stack<int>::Push(int val) { // 实现特定于整型数的压栈功能 }基于模板API的缺点
2、当其他文件包含了类模板定义所在的头文件时,内联的代码都需要重新编译,增加编译时间,使得代码膨胀
No comments yet.