Nuj*_*fas 4 c++ type-traits variadic-templates
我有以下代码,以及从以下站点复制的可变参数模板: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;
}
Run Code Online (Sandbox Code Playgroud)
我有两个问题:1.这里需要sum()函数,这样我才能为处理最后一个可变参数成员时传入的void提供一个返回值-是否可以避免编写此sum()函数并且具有相同的值功能?
谢谢
为了补充@GuillaumeRacicot答案,我宁愿结束与递归if constexpr这是一个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;
}
Run Code Online (Sandbox Code Playgroud)
您还可以考虑折叠表达式:
template<typename ...Pack>
auto sum(Pack... args) {
return (args + ...);
}
Run Code Online (Sandbox Code Playgroud)