【问题标题】:What are templates in C++ 2 [closed]C ++ 2中的模板是什么[关闭]
【发布时间】:2014-02-08 21:54:27
【问题描述】:

大家好,谁能给我解释一下 T 类型(参数化类型)的类模板成员函数返回类型和 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() 的返回值有什么区别??????

【问题讨论】:

  • 首先:什么是'C++ 2' ??
  • T 只是类型的替代品。如果T 恰好不是A,那么区别就很明显了。如果是A,则返回类型相同。
  • @raindrop7 你的编辑让事情变得更糟了!!
  • 对不起,我只想写数组而不是 A。所以你的意思是这两个函数在特化时会返回相同的返回类型?
  • 如果确实需要,您需要写array&lt;T&gt; 以获取对您的模板类型的任何引用!

标签: c++ templates


【解决方案1】:

你有:

  • array
  • 持有tObj

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

getObj 方法返回 tObjarray 记住的东西。

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

这是“从盒子里退回糖果”和“退回盒子”的区别。

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

不是:array GETTOBJ()const;
但是:array&lt;T&gt; GETTOBJ()const;

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

【讨论】:

  • 例如,如果我们这样实例化它: array arInt(7);那么 getObj() 和 GETOBJ() 这两个函数的返回值是多少????
  • 请忽略我之前(已删除)的评论。太晚了,睡眠不足。
  • @raindrop7 这是简单的替换。 getObj() 返回 intGETOBJ 返回 array&lt;int&gt;
  • 好的,我知道了 thnx 2 u。但是你能否在返回“array”时准确一点?这样做有什么意义 return array???
  • 呃..但我们刚刚解释过了..?你到底不明白什么?你明白返回“盒子”和“盒子里的东西”的区别吗?
【解决方案2】:

在下面的例子中“class 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();

等等... class T = typename T

更多信息请查看:

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

哦,是的......并且GETTOBJ返回类的类型......总是...... 如果您定义,则可以等于 GETTOBJ 和 tOBJ:

array <array> _array_var();

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2011-06-29
    • 2023-03-13
    • 2018-11-17
    • 2013-05-19
    相关资源
    最近更新 更多