C++ 中的模板类

问题描述 投票:0回答:2

我们有以下类定义

template<typename T>
class Klass {...}

我们还有以下两个实例

Klass<int> i;
Klass<double> d;

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

c++ templates
2个回答
6
投票

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

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


6
投票

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

另请记住,模板可以专门化:

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;
};

如您所见,在您看到要讨论的实际实例之前,您无法仅从模板本身看出很多内容。

© www.soinside.com 2019 - 2024. All rights reserved.