前一个模板参数可以在它后面这种方式的另一个模板参数一起使用:如何在声明的另一个模板参数使用模板参数
template<typename T, T N>
struct s
{
};
但有可能引用“T”,如果它是在“N”之后声明?
这不起作用:
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”,实际上它使用这些inf以找到一个功能的最佳过载。 所以通过声明模板是这样的:
template<T A, T B, typename T>
struct sum
{
static T const value = A + B;
};
编译器可以使用它的能力来推断从第一和第二个提供的信息的最后一个参数,然后找实例化的最佳模板。
感谢您的回答:如果规范说不,它不是。 现在的问题是:为什么这种有限的行为,而似乎有可能做到这一点扣除? 你有一些例子证明这个决定吗? 谢谢。 – Pragmateek 2009-09-19 14:54:03
因为模板元编程从来没有被表达出来? :)虽然有趣的问题。可能 - 你应该检查这是否已经提出,或者为C++ 1x提出这个建议。 – UncleBens 2009-09-19 15:28:09