C++ 模板与泛型编程详解

一、模板基础概念

1. 模板的定义

模板是C++支持泛型编程的核心机制,允许编写与类型无关的代码。

2. 模板分类

  • 函数模板:生成函数的模具
  • 类模板:生成类的模具
  • 变量模板(C++14):生成变量的模具
  • 别名模板(C++11):生成类型别名的模具

二、函数模板

1. 基本语法

template <typename T>
T max(T a, T b) {
    return a > b ? a : b;
}

2. 使用示例

int a = 1, b = 2;
cout << max(a, b);  // 推导为max<int>

double x = 1.1, y = 2.2;
cout << max(x, y);  // 推导为max<double>

3. 模板参数推导

  • 编译器根据实参自动推导模板参数类型
  • 可显式指定类型:max<double>(a, b)

三、类模板

1. 基本语法

template <typename T>
class Stack {
private:
    std::vector<T> elems;
public:
    void push(T const& elem);
    T pop();
};

2. 成员函数实现

template <typename T>
void Stack<T>::push(T const& elem) {
    elems.push_back(elem);
}

3. 使用示例

Stack<int> intStack;
Stack<std::string> stringStack;

四、非类型模板参数

1. 基本概念

模板参数可以是值而非类型

2. 示例

template <typename T, int size>
class Array {
private:
    T elems[size];
public:
    // ...
};

3. 使用限制

  • 必须是编译期常量
  • 只能是整型、枚举、指针、引用等

五、模板特化

1. 全特化

template <>
class Stack<std::string> {
    // 针对string的特化实现
};

2. 偏特化(部分特化)

template <typename T>
class Stack<T*> {
    // 针对指针类型的特化
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
04-09 20:44
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务