C++ 中的模板 类 和函数
Template Classes and Functions in C++
我有个问题让我很困惑。我知道什么是模板和它的目的,但我在使用上有一些空白。
我有一个这样的模板 class:
template <class elemType>
class SSorting {
public:
int seqSearch(const elemType list[], int length, const elemType& item);
};
当我编写 class 函数 seqSearch 的成员时,我需要声明为:
template <class elemType>
int SSorting <elemType> :: seqSearch(const elemType list[], int length, const elemType& item){
*statements*
}
此时一切正常。模板说这是一个函数,在模板内部 class 和函数前面的 int
意味着该函数将 return 一个整数值,但我不明白的部分是为什么我们必须写 SSorting <elemType> :: seqSearch
而不是 SSorting :: seqSearch
。我已经说过这是模板 class 和 return 的成员,请输入为什么我们需要再次说 <elemType>
。
你应该记得 class/function 模板意味着 对于每个 具有不同模板类型的实例化,编译器会记下代码的另一个副本,将 elemType
替换为相关类型。意思是,如果您在代码中同时使用 SSorting<double>
和 SSorting<int>
,您会得到两种完全不同的类型,具有不同的名称。
因此,class 的名称不是 SSorting
,而是 SSorting<elemType>
!
模板class不是"real"class,它是模板代码。在您使用它之前,它不存在。当你不在定义部分写 "elemType" 部分时,你只是在定义 "real" class.
的成员函数
我有个问题让我很困惑。我知道什么是模板和它的目的,但我在使用上有一些空白。
我有一个这样的模板 class:
template <class elemType>
class SSorting {
public:
int seqSearch(const elemType list[], int length, const elemType& item);
};
当我编写 class 函数 seqSearch 的成员时,我需要声明为:
template <class elemType>
int SSorting <elemType> :: seqSearch(const elemType list[], int length, const elemType& item){
*statements*
}
此时一切正常。模板说这是一个函数,在模板内部 class 和函数前面的 int
意味着该函数将 return 一个整数值,但我不明白的部分是为什么我们必须写 SSorting <elemType> :: seqSearch
而不是 SSorting :: seqSearch
。我已经说过这是模板 class 和 return 的成员,请输入为什么我们需要再次说 <elemType>
。
你应该记得 class/function 模板意味着 对于每个 具有不同模板类型的实例化,编译器会记下代码的另一个副本,将 elemType
替换为相关类型。意思是,如果您在代码中同时使用 SSorting<double>
和 SSorting<int>
,您会得到两种完全不同的类型,具有不同的名称。
因此,class 的名称不是 SSorting
,而是 SSorting<elemType>
!
模板class不是"real"class,它是模板代码。在您使用它之前,它不存在。当你不在定义部分写 "elemType" 部分时,你只是在定义 "real" class.
的成员函数