【发布时间】:2021-08-10 16:50:30
【问题描述】:
我刚刚开始了解可变参数函数模板。 是否可以定义用 2 个或更多参数编写通用案例(处理递归)?也就是说,我想知道我可以写如下内容:
template <class T>
void min(T val1, T val2) { return val1>val2 ? val2 : val1 ; }
template <class T, class... Others>
void min(T a1, T a2, Others ... others) {
// implementation
T a = a1 > a2 ? a2 : a1 ;
// min(a, first-element-in-others, all-elems-in-others-except-first) ;
}
如果可能的话,有人可以告诉我怎么做吗?
【问题讨论】:
-
是的。您是否尝试编译它?这似乎很好......
-
"first-element-in-others, all-elems-in-others-except-first" 这听起来就像“
others中的所有元素”,它是others...。您可能还想查看 fold 表达式。 -
@Elliott 我在注释的
min函数调用中写了什么 -
执行此操作时,避免重复的常见模式是:
T min (T a1, T a2, Ts ... as) { return min(min(a1, a2), as...);}这样您就只依赖基函数进行实际计算。 -
@user3282758 我想你可能想把那里的
void改成T,否则当你尝试使用该函数时编译器可能会抛出错误。