C++中的模板类

ele*_*ven 2 c++ compiler-construction templates

我们有以下类定义

template<typename T>
class Klass {...}
Run Code Online (Sandbox Code Playgroud)

我们还有两个以下的实例

Klass<int> i;
Klass<double> d;
Run Code Online (Sandbox Code Playgroud)

C++编译器生成了多少个Klass方法的副本?有人可以解释一下吗?谢谢!

jua*_*nza 6

Klass不是一种类型,所以谈论Klass方法是没有意义的.Kalss<int>是一种具有自己方法的类型,也是如此Klass<double>.在您的示例中,每种类型都有一组方法.

在现实生活中编辑,并不是那么简单.这些方法的实际存在问题也取决于其他因素,请参阅@ KerrekSB对此问题的回答.


Ker*_* SB 6

每个模板实例都是一个完全独立,独特且独立的类型.但是,只有在成员函数实际用于给定模板实例化时,才会生成类模板成员函数的代码(除非您为某些参数集显式实例化模板).除此之外,这意味着如果某个类模板成员函数的主体对于给定的模板参数实际上没有意义,那么只要不调用该成员函数,您仍然可以使用整个模板,因为代码成员函数永远不会被编译.

还要记住模板可以是专用的:

template <typename T> struct Foo {
    int bar;
    void chi();
};

template <> struct Foo<int> {
    double bar(bool, char) const;
    typedef std::vector<bool> chi;
    bool y;
};
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,在您看到您将要讨论的实际实例之前,您可以从模板本身中分辨出很多内容.