我正在尝试使用可变参数模板查找平方和。输入参数是需要计算平方和的数字。例如:foo(2, 3, 4)
应该返回27
的值(即2+(9+16)
)。我的模板函数如下所示:
template<typename T>
T foo(T args)
{
return args*args;
}
template <typename T, typename... A>
T foo(T first, A... args)
{
return first+foo(pow(args,2)...);
}
但是,此函数的结果似乎是261,这不是我期望的。
最佳答案
简短答案:2 + 9 + 256 = 267
让我们扩展一下:
foo(2, 3, 4) => 2 + foo(pow(args, 2)...)
=> 2 + foo(pow(3, 2), pow(4, 2))
=> 2 + foo(9, 16)
=> 2 + (9 + foo(16))
=> 2 + (9 + 16 * 16)
=> 267
Hello world!
如果您想正确执行操作,请勿多次
pow()
一个值:template <typename T>
T foo(T arg)
{
return arg * arg;
}
template <typename T, typename... A>
T foo(T first, A... args)
{
return first * first + foo(args...);
// ^^^^^^^^^^^^^ or pow(first, 2)
}