设计两个函数模板,其功能分别是返回两个值中的较大者和返回多个值中的较大者。要求不仅能够处理整型、实型等数值型数据,而且能够正确处理字符串。
时间: 2024-03-23 18:39:55 浏览: 59
下面是两个函数模板的实现,第一个函数模板返回两个值中的较大者,第二个函数模板返回多个值中的较大者,都能够正确处理数值型数据和字符串。
```cpp
#include <iostream>
#include <string>
using namespace std;
template<typename T>
T max(T a, T b) {
return a > b ? a : b;
}
template<typename T>
T max(T a, T b, T c) {
return max(max(a, b), c);
}
template<typename T, typename... Args>
T max(T a, Args... args) {
return max(a, max(args...));
}
template<>
string max(string a, string b) {
return a > b ? a : b;
}
int main() {
cout << max(1, 2) << endl;
cout << max(3.14, 2.71) << endl;
cout << max("hello", "world") << endl;
cout << max("hello", "world", "cpp") << endl;
cout << max(1, 2, 3, 4, 5) << endl;
return 0;
}
```
在这个实现中,我们使用了可变参数模板来处理多个参数的情况。在返回多个值中的较大者的函数模板中,我们先调用 `max(a, b)` 得到两个值中的较大者,再递归调用 `max` 函数模板来处理剩余的参数,直到所有参数都被处理完毕。注意,我们还需要为字符串类型重载 `max` 函数模板,因为字符串不能直接进行比较运算。
阅读全文