【发布时间】:2014-03-27 01:40:34
【问题描述】:
在使用 sqrt 模板函数时遇到了一些问题(只是想尝试一下,我知道
下面的代码给出了错误:模板参数太多
namespace {
static const size_t ITERATIONS = 10;
}
template <typename T, T N> struct Sqrt {
static const T value = Sqrt<T, N, 1, ITERATIONS>::value;
};
//Newtons method: A = (N / A + A) / 2
template <typename T, T N, T A, size_t I> struct Sqrt {
static const T value = Sqrt<T, N, (N / A + A) / 2, I - 1>::value;
};
template <typename T, T N, T A> struct Sqrt<T, N, A, 0> {
static const T value = A;
};
谢谢
【问题讨论】:
-
您的意思是要有一个variadic template 参数列表吗?
-
当我有一个接受 4 个参数的模板并且我还传递了 4 个参数时,我只是不确定为什么会收到“模板参数过多”错误。
-
显示确切的错误和
Sqrt的用法,否则我们不会相信你。 -
Sqrt模板类的名称是唯一的,并且您有前面的template <typename T, T N> struct Sqrt声明,它接受 2 个参数。您要么需要使用适当的模板参数默认值,要么需要使用提到的 ellpsis (...) 来指定可变参数模板参数列表。 -
@CaptainObvlious 不,那个时候没有那种健忘;)...