C++类模板编程练习(从基础到进阶)
一、基础模板类设计
- 泛型盒子(Box)
实现一个 Box 类模板,存储任意类型的值,并提供获取/修改方法。
Box<int> intBox(42);
cout << intBox.get(); // 输出 42
intBox.set(100);
- 类型转换器(Converter)
实现 Converter<T, U> 类模板,提供静态方法 convert,将类型 T 转换为 U。
double d = Converter<int, double>::convert(42); // 42.0
二、模板与数学运算
- 泛型计算器(Calculator)
实现 Calculator 类模板,支持加减乘除(编译时检查 T 是否为算术类型)。
Calculator<int> calc;
cout << calc.add(3, 5); // 输出 8
- 固定大小数组(FixedArray)
实现 FixedArray<T, N> 类模板,表示固定长度的数组。
FixedArray<float, 3> arr = {1.1f, 2.2f, 3.3f};
cout << arr[1]; // 输出 2.2
三、模板特化与条件逻辑
- 类型判别器(TypeInfo)
实现 TypeInfo 类模板,通过静态成员变量输出类型名称。
cout << TypeInfo<int>::name; // 输出 "int"
// 对指针类型特化:TypeInfo<int*>::name 输出 "int*"
- 布尔值包装器(BoolWrapper)
特化一个模板类,根据布尔值选择不同行为。
BoolWrapper<true>::action(); // 输出 "True path"
BoolWrapper<false>::action(); // 输出 "False path"
四、多参数模板
- 泛型坐标点(Point)
实现 Point<T, U> 类模板,表示混合类型的二维点。
Point<int, double> p(1, 2.5);
cout << p.x << ", " << p.y; // 输出 1, 2.5
2.键值对存储(KeyValuePair)
实现 KeyValuePair<K, V> 类模板,模拟简单的字典条目。
KeyValuePair<string, int> kv("age", 25);
cout << kv.key << ": " << kv.value; // 输出 "age: 25"
五、综合挑战
- 泛型单例模式(Singleton)
实现线程安全的 Singleton 类模板。
Singleton<Logger>::getInstance().log("Hello");
2.编译期阶乘(Factorial)
用模板元编程实现编译期阶乘计算。
constexpr int val = Factorial<5>::value; // 120