模板是C++泛型编程的核心,通过template定义函数和类实现类型通用。1. 模板函数如max(T a, T b)可自动推导类型,支持显式指定;2. 多参数模板如printPair处理不同类型;3. 模板类如Stack<T>构建通用数据结构,需实例化时指定类型;4. 模板定义须在头文件中,避免分离声明与实现导致链接错误;5. 注意类型操作合法性及推导失败问题。掌握这些可提升代码复用与灵活性。

在C++中,模板是实现泛型编程的核心工具。通过模板函数和模板类,可以编写与数据类型无关的通用代码,提高代码复用性和灵活性。下面详细介绍它们的使用方法。
模板函数允许你定义一个函数,使其参数类型在调用时才确定。
使用 template 关键字声明模板,后跟类型参数列表(通常用 typename T 或 class T)。
例如,写一个通用的比较函数:
立即学习“C++免费学习笔记(深入)”;
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
调用时无需显式指定类型,编译器会自动推导:
int x = 5, y = 10; double m = 3.14, n = 2.71; <p>std::cout << max(x, y) << std::endl; // 输出 10 std::cout << max(m, n) << std::endl; // 输出 3.14</p>
也可以显式指定类型:
max<double>(m, n);
模板函数可以有多个类型参数,适用于不同类型之间的操作。
template <typename T, typename U>
void printPair(T a, U b) {
std::cout << a << ", " << b << std::endl;
}
调用示例:
printPair(10, "hello"); // int 和 const char*
printPair("age", 25); // const char* 和 int
模板类用于创建通用的数据结构,比如容器。
同样使用 template 声明,类内使用类型参数。
template <typename T>
class Stack {
private:
std::vector<T> elements;
public:
void push(const T& value) {
elements.push_back(value);
}
<pre class='brush:php;toolbar:false;'>void pop() {
if (!elements.empty()) {
elements.pop_back();
}
}
T top() const {
if (!elements.empty()) {
return elements.back();
}
throw std::out_of_range("Stack<T>::top(): empty stack");
}
bool empty() const {
return elements.empty();
}};
使用模板类时必须指定具体类型:
Stack<int> intStack;
Stack<std::string> stringStack;
<p>intStack.push(1);
intStack.push(2);
std::cout << intStack.top() << std::endl; // 输出 2</p><p>stringStack.push("Hello");
stringStack.push("World");
std::cout << stringStack.top() << std::endl; // 输出 World
</p>模板的定义(包括函数体或类成员函数)通常需要放在头文件中,因为编译器要在编译时看到完整定义才能实例化模板。
常见错误包括:
建议在调试模板问题时,检查错误信息中的实例化路径,确认类型是否匹配。
基本上就这些。掌握模板函数和模板类,能让你写出更灵活、可复用的C++代码。关键是理解类型参数的替换机制,并注意定义位置和类型约束。不复杂但容易忽略细节。
以上就是C++如何使用模板函数和模板类_C++ 模板函数与模板类使用方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号