我正在尝试创建一个通用的 sum 函数模板。该模板将是left associative
. 下面是我的实现
int result=0;
template <typename D, typename T>
const T &sum_helper(const D &d, const T &v) {
result=result+v;
return result;
}
int pass(...){}
template <typename D, typename T1, typename... Ts>
auto sum_helper(const D &d, const T1 &v1, const Ts &... params) -> decltype(v1 + sum_helper(d, params...)) {
return v1 + sum_helper(d, params... );
}
class A {};
template <typename... Ns>
struct seq {};
template <typename... Ts>
auto sum(const Ts &... params) -> decltype(sum_helper(A(), params...))
{
return pass((sum_helper(seq<Ts...>(),params)) ...,1);
}
但是当我像sum(1,2,3,4)
它一样调用它时,它总是输出0
。怎么了?我知道pass
应该纠正。但是有什么方法可以纠正呢?