第一节 · 绘制蓝图 · 初试定义模板

模板是 C++ 泛型编程的基础。函数模板让我们能够编写与类型无关的代码,由编译器根据实际类型生成具体的函数。


为什么需要模板

// 没有模板,需要为每种类型写一个函数
int maxInt(int a, int b) { return a > b ? a : b; }
double maxDouble(double a, double b) { return a > b ? a : b; }
string maxString(string a, string b) { return a > b ? a : b; }

// 有了模板,一个函数就够了
template<typename T>
T maximum(T a, T b)
{
    return a > b ? a : b;
}

int main()
{
    cout << maximum(3, 5) << endl;        // int
    cout << maximum(3.14, 2.72) << endl;  // double
    cout << maximum("abc"s, "def"s) << endl;  // string
    
    return 0;
}

模板语法


模板实例化


非类型模板参数


模板特化


SFINAE 与 enable_if


可变参数模板


完美转发


constexpr 函数模板


习题

  • 实现一个通用的 swap 函数模板。

  • 编写一个可以比较任意类型数组的函数模板。

  • 使用可变参数模板实现一个 sum 函数。

Last updated