C++模版
C 模板的核心概念模板是一种允许代码参数化类型的机制本质是编译器根据类型参数自动生成具体代码的技术。其核心价值在于避免为不同数据类型重复编写相似逻辑的代码。函数模板的实现与应用通过声明类型参数实现通用函数逻辑template typename T T max(T a, T b) { return (a b) ? a : b; }调用时编译器自动推导类型max(10, 20); // 生成int版本 max(3.14, 2.71); // 生成double版本类模板的典型使用场景常见于容器类的实现通过类型参数化存储元素template class ElementType class Stack { ElementType data[100]; int top 0; public: void push(ElementType item) { data[top] item; } };实例化时显式指定类型Stackint intStack; Stackstd::string strStack;模板参数的多态特性支持非类型参数和默认参数template typename T, int size 100 class Buffer { T array[size]; };多参数模板示例template typename Key, typename Value class HashMap { /*...*/ };模板的编译期行为模板实例化发生在编译阶段每个不同类型参数组合都会生成独立的代码版本。这可能导致代码膨胀问题但现代编译器会进行优化。类型推导规则C17引入的CTAD类模板参数推导特性std::pair p(1, 3.14); // 自动推导为pairint, double函数模板支持自动类型推导和显式指定addint(1, 2); // 显式实例化 add(1.5, 2.3); // 自动推导为double模板特化机制通过特化处理特定类型的特殊逻辑template const char* max(const char* a, const char* b) { return strcmp(a, b) 0 ? a : b; }部分特化支持对特定类型模式的定制template typename T class VectorT* { /* 指针特化版本 */ };可变参数模板支持参数数量不定的通用编程template typename... Args void log(Args... args) { (std::cout ... args) \n; }模板元编程利用模板在编译期进行计算template int N struct Factorial { static const int value N * FactorialN-1::value; }; template struct Factorial0 { static const int value 1; };现代C的模板增强C20引入概念(concepts)改进模板错误信息template std::integral T T gcd(T a, T b) { /* 只接受整数类型 */ }requires子句提供更灵活的类型约束template typename T requires requires(T x) { { x } - std::same_asT; } void increment(T val) { val; }