【发布时间】:2009-09-18 22:48:11
【问题描述】:
一个模板参数可以用在另一个模板参数中:
template<typename T, T N>
struct s
{
};
但是如果在“N”之后声明,是否可以引用“T”?
这不起作用:
template<T N, typename T>
struct s
{
};
我们可以通过预先声明“T”或做其他事情来帮助编译器吗?
提前致谢。
编辑:正如前两个回复所问的“你为什么愿意这样做?”我将解释目标:
我想让编译器推断类型“T”以便更轻松地使用模板类。
例如:
template<typename T, T A, T B>
struct sum
{
static T const value = A + B;
};
这个模板可以这样使用:
sum<int, 1, 2>::value
但如果能这样使用就更好了:
sum<1, 2>::value
从技术上讲这应该是可能的,因为编译器知道“1”和“2”的类型:“int”,实际上它使用这些信息来找到函数的最佳重载。 所以通过这种方式声明模板:
template<T A, T B, typename T>
struct sum
{
static T const value = A + B;
};
编译器可以利用它的能力从第一个和第二个提供的信息中推断出最后一个参数,然后找到最好的模板来实例化。
【问题讨论】:
标签: c++ templates parameters declaration