C++模板编程:从入门到精通
发表时间: 2024-05-15 09:50
当然可以,以下是一些更详细的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++中强大的特性之一,它可以极大地提高代码的复用性和灵活性。