使用<>的模板类名标记

时间:2013-09-24 15:46:24

标签: c++ templates

  template<int32_t ID= 0, class ID_TYPE = int32_t>
  class Event {
  public:
      typedef ID_TYPE type;
      typedef Event<ID, ID_TYPE> event_obj_type;
   .....  
}

关于此代码,“Event<ID, ID_TYPE>”是什么意思? 类名与&lt;&gt;,我以前从未见过这个。 有人可以开导我吗? 感谢

2 个答案:

答案 0 :(得分:3)

您可能熟悉功能模板。这样:

Event<ID, ID_TYPE> 

类模板。与函数模板实例化不同,其中函数的参数本身有助于编译器推导出模板类型参数,使用类模板必须显式传递模板类型(在尖括号中)。

An Idiot's Guide to C++ Templates - Part 1

答案 1 :(得分:1)

事件是一个模板:在编译时创建类似类的模式。 如果在您的代码的某些地方,您:     事件&lt; 0,int32_t&gt;一个;     事件&lt; 3,char&gt; A;

将从此模板定义两个类。一个使用ID = 0, ID_TYPE = int32_t,另一个使用ID = 3, ID_TYPE = char

[编辑] 如果你分解第一个,你的类定义将是:

class Event
{
    public:
    typedef int32_t type;
    typedef Event event_obj_type;
    .....  
}