bw模板类和实例有什么区别?

时间:2018-10-05 07:38:02

标签: c++

我最近拿出下面的图片来解释c ++标头的内容。 C++ IO Headers

在每个类模板上,都附加了实例化,它们之间有什么区别,以及拥有前者的优点是什么。

2 个答案:

答案 0 :(得分:2)

实例化普通类时,您将获得该类的对象(或实例)。

class Normal 
{
};

Normal Na, Nb; //Na and Nb are instances of the Normal class

实例化一个类模板时,您将获得用作模板参数的类型的类。

简单的示例:

template<typename T>
class PodTemplate { 
  T a;
}

typedef PodTemplate<int> intClass; //variable `a` in intClass is an int, as the template is instantiated with `typename = int`
typedef PodTemplate<float> floatClass; //variable `a` in  floatClass is an float, as the template is instantiated with `typename = float`

类似地,在您显示的图片中,有模板以及这些模板的实例化产生类。

例如,考虑basic_istream类模板:

template <typename charT, typename traits = char_traits<charT> >
  class basic_istream; 

使用typename = char实例化上述模板为我们提供了istream类。

typedef basic_istream<char> istream;

答案 1 :(得分:1)

cppreference中对此进行了很好的解释。无论如何,您可以通过提供模板参数来实例化模板。例如:

template<
    class CharT,
    class Traits = std::char_traits<CharT>,
    class Allocator = std::allocator<CharT>
> class basic_stringstream;

是一个模板类,它接受3个模板参数(其中2个具有默认值),而basic_stringstream<char>是带有模板参数char的模板实例,并具有别名(typedef){{ 1}}。