C++泛型编程:模板

1️⃣ 模板是什么?

模板(Template)是 C++ 的一种泛型机制,让你写一次代码,支持多种数据类型

常用于实现 「类型无关」 的函数或类,比如 std::vector<T>std::sort() 等都基于模板。


2️⃣ 函数模板(Function Template)

🔹 定义语法:

template<typename T>
T add(T a, T b) {
    return a + b;
}

🔍 分解语法:

  • template:C++ 关键字,表示“声明一个模板”。

  • <typename T>

    • T类型参数,像函数的形参一样,是“类型的占位符”。
    • typename 表示 T 是一个类型名,也可以写作 class T两者等价,只是 typename 在现代 C++ 中更推荐使用。
  • T add(T a, T b):这里 T 被当作类型使用,函数参数和返回值都用这个模板参数。

template<typename T>必须紧挨着函数或类定义上方

🧪 使用方法:

int result = add<int>(3, 5);       // 显式指定类型为 int
double d = add(1.1, 2.2);          // 编译器自动推导类型为 double

✅ 模板定义必须放在头文件或 .h/.hpp 文件中,因为模板是在编译时实例化的


3️⃣ 类模板(Class Template)

🔹 定义语法:

template<typename T>
class Box {
public:
    void set(T v) { value = v; }
    T get() { return value; }
private:
    T value;
};

🔍 分解语法:

  • 与函数模板一样,先写一行 template<typename T> 来声明类型参数。
  • class Box 里可以使用这个类型参数 T,例如作为成员变量、函数参数或返回值的类型。

🧪 使用方法:

Box<int> b1;
b1.set(10);

Box<std::string> b2;
b2.set("hello");

✅ 类模板也必须放在头文件中,不能只声明不定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值