在C++中,函数模板是一种泛型编程的工具,它允许你编写一次代码,然后用它来处理不同的数据类型。函数模板的基本语法如下:
```cpp
template T functionName(T arg1, T arg2) { // 函数体 return result; } ``` 在这里,`template 函数模板的使用非常直接,你只需要在调用函数时指定具体的类型即可。例如,如果你定义了一个求两个数中最大值的函数模板: ```cpp template T max(T a, T b) { return (a > b) ? a : b; } ``` 你可以在 `main` 函数中这样调用它: ```cpp int main() { int intResult = max(3, 4); double doubleResult = max(3.14, 2.72); char charResult = max('A', 'B'); std::cout << "Max of 3 and 4: " << intResult << std::endl; std::cout << "Max of 3.14 and 2.72: " << doubleResult << std::endl; std::cout << "Max of 'A' and 'B': " << charResult << std::endl; return 0; } ``` 在这个例子中,`max` 函数模板被用来求整数、浮点数和字符的最大值。编译器会根据传入参数的类型自动生成相应的函数版本。 函数模板的进阶用法包括: 你可以定义一个接受多个类型参数的模板,例如: ```cpp template void printMinMax(T1 a, T1 b, T2 c, T2 d) { std::cout << "Min of "<< a << " and "<< b << " is " << std::min(a, b) << std::endl; std::cout << "Max of "<< c << " and "<< d << " is " << std::max(c, d) << std::endl; } ``` 你可以为模板参数指定默认类型,这样在调用函数时如果没有指定类型,编译器会使用默认类型: ```cpp template T add(T a, T b) { return a + b; } ``` 在这个例子中,如果调用 `add(5, 10)`,编译器会使用 `int` 类型。如果调用 `add(5.5, 10.2)`,编译器会使用 `double` 类型。 你可以为特定的类型提供模板特化的实现,这样当编译器遇到特定类型的参数时,会使用特化的版本: ```cpp template <> std::string add return a + " " + b; } ``` 在这个例子中,当 `add` 函数模板被用于 `std::string` 类型的参数时,会使用这个特化的版本。 使用函数模板可以提高代码的复用性和灵活性,是C++编程中非常重要的一个特性。多个类型参数:
默认类型参数:
模板特化: