模板什么时候结束?

时间:2017-05-13 18:26:08

标签: c++

模板什么时候结束? 我们来看看这段代码:

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定义

1 个答案:

答案 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; }
 };