什么是C ++ 2中的模板

时间:2014-02-08 21:54:27

标签: c++ templates

大家好我们有人可以向我解释类型T(参数化类型)的类temlplate成员函数返回类型与claas返回类型的对象之间的区别

template<class T>
class array
{
public:
     array(T tx): tObj(tx){}
     T getObj()const{return tObj;}
     array GETTOBJ()const;
private:
     T tObj;
}

我有困惑:函数getObj()和GETTOBJ()的返回值有什么区别??????

2 个答案:

答案 0 :(得分:4)

你有:

  • array
  • 持有tObj

tObj的实际值是通过数组的构造函数给出的,array会记住它。

getObj方法返回tObj,即array记住的内容。

GETOBJ方法返回array。它的代码没有显示,但差异已经存在:它返回一些array,而不是数组记住的东西。

这是一个区别,比如“从盒子里回来糖果”和“退回盒子”。

顺便说一下。我认为你的sig缺少类型参数。我的意思是:

不是:array GETTOBJ()const;
但是:array<T> GETTOBJ()const;

因为数组是模板,没有类型参数的array没有意义。

答案 1 :(得分:0)

在下面的示例中,“类T”没有定义,因此在初始化此类时,您可以添加任何参数。例如:

array <int> _array_var(); //OR
array <char> _array_var(); // OR WHAT TYPE YOU WHANT, EVEN SOME STRUCTURES OR CLASSES

在您的示例中“T tOBJ()”将返回您初始化的类型。例如:

如果你

array <int> _array_var(); // THAN T=int.... SO T tOBJ will return int type, equivalent to

int tOBJ();

依此类推......类T = typename T

了解更多信息:

http://en.wikipedia.org/wiki/Template_(C%2B%2B)

是的,而且GETTOBJ归类于班级...总是...... 如果您定义:

,则可以使用tOBJ与GETTOBJ相等
array <array> _array_var();