【发布时间】:2013-05-13 11:20:03
【问题描述】:
我正在尝试创建一个通用的求和函数模板。此模板为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。但是有什么办法可以改正呢?
【问题讨论】:
-
pass/seq 有什么用?
标签: c++ templates c++11 g++ variadic-templates