c++ - 可变参数模板 - 递归函数 - 最后一个可变参数成员
问题描述
我有以下代码,其中包含从以下位置复制的可变参数模板: https ://www.youtube.com/watch?v=iWvcoIKSaoc @41:30
auto sum() { return 0; }
template<typename Head, typename... Tail>
auto sum(Head head, Tail... tail)
{
return head+sum(tail...);
}
int main() {
cout<< sum(1,2.4) << endl;
//cout<< sum("hello ", "world") << endl;
return 0;
}
我有两个问题: 1. 这里需要 sum() 函数,这样我可以在处理最后一个可变参数成员时为传入的 void 返回值 - 是否可以避免编写这个 sum() 函数并具有相同的功能?
- 从 sum() 函数返回整数“0”会限制整数使用整个模板 - 我可以扩展相同的模板来连接字符串吗?
谢谢你
解决方案
if constexpr
为了补充@GuillaumeRacicot 的答案,我更喜欢用它来结束递归c++17
。
template<typename Head, typename Second, typename... Tail>
auto sum(Head head, Second second, Tail... tail)
{
if constexpr(sizeof...(tail) > 0)
return head + sum(second, tail...);
return head + second;
}
您还可以考虑折叠表达式:
template<typename ...Pack>
auto sum(Pack... args) {
return (args + ...);
}
推荐阅读
- react-native - 如何从 React Native 中的目录导入矢量图标?
- kendo-ui - Kendo UI 多选标记模式 - 基于键入的值进行过滤,而不将键入的文本传递给服务器
- javascript - 如何使用本机反应在firebase中显示日期
- c++ - 如何编写 CMakeLists.txt 来构建一些源代码及其示例代码?
- docker - 如何重用来自 `RUN --mount=type=cache` docker build 的缓存?
- sql - 无法实现外键约束 »FK_0e4022833a9efc062c01637e552« - 复合主键有问题?
- javascript - document.write 写入“对象”而不是文本
- mysql - MySQL 数据库或简单的 JSON 文件,哪一个会提高性能和存储效率?
- c - 如何从函数返回动态分配的二维矩阵?
- powershell - Powershell脚本任务中的TF Merge命令不起作用