c++ - 实现 find_max
问题描述
下面的代码给出error: expansion pattern 'args' contains no parameter packs
template<typename T>
T find_max(T a) {
return a;
}
template<typename T>
T find_max(T a, T args...) {
T sofar = find_max(args...);
if (a > sofar) return a;
return sofar;
}
我找到了这个代码片段
T find_max(T a) {
return a;
}
template<typename T, typename... Ts>
T find_max(T a, Ts... args) {
T sofar = find_max(args...);
if (a > sofar) return a;
return sofar;
}
但是,这不会对类型施加任何约束,因为在find_max(2, 3, 3.2)
编译时不会出错。如何在第一个片段中解压缩(如果没有,我们如何使用T args...
) ?args
解决方案
这是
#include <iostream>
template<typename T>
T find_max(T a) {
return a;
}
template<typename T>
T find_max(T a, T b) {
T sofar = find_max(b);
if (a > sofar) return a;
return sofar;
}
template<typename T, typename... Ts>
T find_max(T a, T b, Ts... args) {
T sofar = find_max(b, args...);
if (a > sofar) return a;
return sofar;
}
int main() {
std::cout << find_max(2);
std::cout << find_max(2, 3);
std::cout << find_max(2, 3, 4);
std::cout << find_max(2, 3, 4, 5);
std::cout << find_max(2, 3, 4, 5.0); // error: no matching function for call to 'find_max'
}
推荐阅读
- typescript - TypeScript 是否错误地输入了这个 reduce 表达式?为什么?
- java - 库、“注入工厂”和扩展库的最佳实践
- c# - 使用 MathNet 库沿三次样条插值
- laravel - Laravel 和 MongoDB 登录连接错误“找不到合适的服务器”(在本地服务器上中断,在产品上工作)
- io - 可以在控制台输入上 deno emmit 事件吗?
- windows - 使用未解析的变量或脚本参数创建脚本(如“%~dp0”)
- vue.js - 如何在 vue 模板中使用异步功能?
- r - 在 geom_text() 的分组文本中插入返回
- html - HTML - 一个溢出的、相对定位的子元素在它的父元素中创建了额外的空间
- python - 如何从 Kivy 的 ScreenManager 访问 id 并通过主应用程序类处理它们?