我想编写一个简单的加法器(用于傻笑),将每个参数加起来并返回具有适当类型的和。目前,我有这个:
#include <iostream>
using namespace std;
template <class T>
T sum(const T& in)
{
return in;
}
template <class T, class... P>
auto sum(const T& t, const P&... p) -> decltype(t + sum(p...))
{
return t + sum(p...);
}
int main()
{
cout << sum(5, 10.0, 22.2) << endl;
}
在GCC 4.5.1上,这似乎可以很好地用于2个参数,例如sum(2,5.5)返回7.5。但是,使用了比这更多的参数,我得到的错误是尚未定义sum()。如果我这样声明sum():
template <class T, class P...>
T sum(const T& t, const P&... p);
然后它适用于任意数量的参数,但是sum(2,5.5)将返回整数7,这不是我期望的。对于两个以上的参数,我认为decltype()必须进行某种递归才能得出t + sum(p ...)的类型。这是合法的C ++ 0x吗?还是decltype()仅适用于非变量声明?如果是这样,您将如何编写这样的函数?
慕村9548890
holdtom
偶然的你
相关分类