【问题标题】:Template Classes and Functions in C++C++ 中的模板类和函数
【发布时间】:2020-07-15 16:01:53
【问题描述】:

我有一个令我困惑的问题。我知道什么是模板和它的目的,但我在使用上有一些空白点。

我有一个这样的模板类:

template <class elemType>
class SSorting {
public:

int seqSearch(const elemType list[], int length, const elemType& item);
};

当我对类函数 seqSearch 的成员进行编码时,我需要声明为:

template <class elemType>
int SSorting <elemType> :: seqSearch(const elemType list[], int length, const elemType& item){
    *statements*
}

此时一切正常。模板说这是一个在模板类内部的函数,函数前面的int表示该函数将返回一个整数值,但我不明白的部分是为什么我们必须写SSorting &lt;elemType&gt; :: seqSearch而不是SSorting :: seqSearch。我已经说过这是一个模板类和返回类型的成员,为什么我们需要再说一次&lt;elemType&gt;

【问题讨论】:

    标签: c++ class templates abstract-data-type template-classes


    【解决方案1】:

    您应该记得类/函数模板意味着对于每个使用不同模板类型的实例化,编译器会写下另一个代码副本,替换elemType与相关类型。这意味着,如果您在代码中同时使用SSorting&lt;double&gt;SSorting&lt;int&gt;,您将获得两种完全不同的类型,但名称不同。

    因此,类的名称不是SSorting,而是SSorting&lt;elemType&gt;

    【讨论】:

    • 如果你认为这个答案是正确的(并回答了你的问题),你应该接受它,或者至少支持它
    • 这里同样挑剔:正确的术语是“类模板”而不是“模板类”(和“函数模板”而不是“模板函数”)
    • @idclev463035818 已修复
    • 修复了这个问题 ;)
    • @idclev463035818 请原谅我的语法不好XD
    【解决方案2】:

    模板类不是“真正的”类,它是模板代码。在您使用它之前它不存在。当你在定义部分不写“elemType”部分时,你只是在定义一个“真实”类的成员函数。

    【讨论】:

    • 没有模板类你的意思是“类模板”
    • @walnut 是的,我知道,我想我只是对他们在这里的意思感到困惑:D
    猜你喜欢
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2011-06-27
    • 2021-11-08
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多