C++模板初阶知识
C++模板是一种强大的工具,使你能够编写可以处理任意数据类型的通用代码。模板主要有两种形式:函数模板和类模板。下面是一些初阶知识,帮助你理解如何使用C++模板。
1. 函数模板
函数模板允许你定义一个函数,而不必指定确切的数据类型。它可以用于多个数据类型的函数调用。
示例:
#include <iostream>
using namespace std;
// 定义一个简单的函数模板,用于返回较大的值
template <typename T>
T getMax(T a, T b) {
return (a > b) ? a : b;
}
int main() {
cout << getMax(10, 20) << endl; // 调用 int 类型的模板
cout << getMax(34.5, 28.9) << endl; // 调用 double 类型的模板
cout << getMax('a', 'b') << endl; // 调用 char 类型的模板
return 0;
}
2. 类模板
类模板允许你创建一个模板化的类或结构,这样就可以使用单个类或结构来处理多种数据类型的对象。
示例:
#include <iostream>
using namespace std;
// 定义一个简单的类模板,用于存储一个数值
template <typename T>
class Storage {
private:
T value;
public:
Storage(T v) : value(v) {}
T getValue() { return value; }
};
int main() {
Storage<int> intStorage(123);
Storage<double> doubleStorage(456.78);
cout << intStorage.getValue() << endl; // 使用 int 类型的 Storage
cout << doubleStorage.getValue() << endl; // 使用 double 类型的 Storage
return 0;
}
3. 模板参数
模板参数可以不仅限于类型,还可以是非类型参数,比如整数。
示例:
#include <iostream>
using namespace std;
// 非类型模板参数
template <typename T, int size>
class Array {
private:
T arr[size];
public:
void printSize() { cout << "Size of array: " << size << endl; }
};
int main() {
Array<int, 10> intArray;
intArray.printSize(); // 打印数组的大小
return 0;
}
4. 模板特化
有时候你需要为特定的类型提供不同的实现,这就是模板特化的用途。
示例:
#include <iostream>
using namespace std;
template <typename T>
class Printer {
public:
static void print(T value) {
cout << value << endl;
}
};
// 对 char* 类型进行特化
template <>
class Printer<char*> {
public:
static void print(char* value) {
cout << "String: " << value << endl;
}
};
int main() {
Printer<int>::print(123);
Printer<double>::print(45.67);
Printer<char*>::print("Hello, World!");
return 0;
}
通过掌握这些基本概念,你可以利用C++模板来编写更加灵活和可复用的代码。模板是C++中的高级特性,进一步的学习还可以深入研究模板元编程等高阶主题。