一个模板参数可以用在下面的另一个模板参数中:
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;
};
编译器可以利用它的能力从第一个和第二个提供的信息中推断出最后一个参数,然后找到最好的模板来实例化。