模板什么时候结束? 我们来看看这段代码:
template <class T>
class thatClass
{
T a, b;
thatClass (T x, T y) {a = x; b = y;}
};
template <class T>T aFunc(T one, T two)
{
return one+two;
}
那么template <class T>
什么时候结束?它是否总是在类或函数定义结束后结束或者什么?为什么你不能只使用你为类和函数声明的那个模板,所以在这种情况下,我可以对函数T
和类使用模板参数aFunc
定义
答案 0 :(得分:6)
模板参数的范围以模板主题的范围结束:
template <class T>
class thatClass
{
T a, b;
thatClass (T x, T y) {a = x; b = y;}
}; // << ends here
template <class T>T aFunc(T one, T two)
{
return one+two;
} // << ends here
为什么你不能只使用你为类和函数声明的那个模板,所以在这种情况下,我可以将模板参数
T
用于函数aFunc
和对于类的定义?
您不能因为模板参数范围始终绑定到类/结构或函数定义。这就是用语言定义的。
人们可以想到模仿整个namespace
,但这不是一个可用的语言功能,而且我不确定这是否是一个好主意。
当你似乎感到困惑时,我会添加一些变化:
template <class T>
class thatClass
{
T a, b;
thatClass (T x, T y) {a = x; b = y;}
// A member funcion that uses the same template parameter and accesses
// the class member variables
T aFunc() { return a+b; }
// A static member funcion that uses the same template parameter and
// calculates the result from the parameters
static T aStaticFunc(T one, T two) { return one+two; }
};