当然可以,以下是一些更详细的C++模板编程示例:
- 函数模板示例:
假设我们想要实现一个计算两个数之和的函数模板:
#include <iostream>
// 函数模板定义
template <typename T>
T sum(T a, T b) {
return a + b;
}
int main() {
// 使用函数模板计算整数之和
int intSum = sum<int>(3, 5);
std::cout << "整数之和:" << intSum << std::endl;
// 使用函数模板计算浮点数之和
double floatSum = sum<double>(3.5, 5.7);
std::cout << "浮点数之和:" << floatSum << std::endl;
return 0;
}
- 类模板示例:
我们可以定义一个简单的列表类模板,它可以存储任意类型的元素:
#include <iostream>
#include <vector>
// 类模板定义
template <typename T>
class MyList {
private:
std::vector<T> listElements;
public:
void add(const T& element) {
listElements.push_back(element);
}
T get(size_t index) const {
if (index >= listElements.size()) {
throw std::out_of_range("Index out of range");
}
return listElements[index];
}
size_t size() const {
return listElements.size();
}
};
int main() {
// 使用类模板创建一个整数列表
MyList<int> myIntList;
myIntList.add(1);
myIntList.add(2);
myIntList.add(3);
for (size_t i = 0; i < myIntList.size(); ++i) {
std::cout << "整数列表元素:" << myIntList.get(i) << std::endl;
}
// 使用类模板创建一个浮点数列表
MyList<float> myFloatList;
myFloatList.add(1.5f);
myFloatList.add(2.5f);
myFloatList.add(3.5f);
for (size_t i = 0; i < myFloatList.size(); ++i) {
std::cout << "浮点数列表元素:" << myFloatList.get(i) << std::endl;
}
return 0;
}
- 模板特化示例:
有时候,我们可能需要对某些特定类型进行特殊处理。这时,可以使用模板特化来实现:
#include <iostream>
// 函数模板定义
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
// 模板特化,针对char类型
template <>
char max(char a, char b) {
// 这里可以添加针对char类型的特殊逻辑
return (a > b) ? a : b;
}
int main() {
// 使用函数模板计算整数之和
int intMax = max<int>(3, 5);
std::cout << "整数最大值:" << intMax << std::endl;
// 使用函数模板计算浮点数之和
double floatMax = max<double>(3.5, 5.7);
std::cout << "浮点数最大值:" << floatMax << std::endl;
// 使用模板特化计算char类型的最大值
char charMax = max<char>('A', 'Z');
std::cout << "char类型最大值:" << charMax << std::endl;
return 0;
}
这些示例展示了如何在C++中使用模板编程来创建可重用和类型安全的代码。模板编程是C++中强大的特性之一,它可以极大地提高代码的复用性和灵活性。