0
  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>”是什么意思?带<>的类名,我以前从未见过。有人可以启发我吗?谢谢

4

2 回答 2

3

您可能熟悉函数模板。这个:

Event<ID, ID_TYPE> 

是一个类模板。与函数模板实例化不同,函数本身的参数帮助编译器推断模板类型参数,对于类模板,您必须显式传递模板类型(在尖括号中)。

C++ 模板的白痴指南 - 第 1 部分

于 2013-09-24T15:56:29.167 回答
1

事件是一个模板:在编译时创建类似类的模式。如果您在代码的某些地方制作: Event<0, int32_t> A; 事件<3, 字符> A;

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

[编辑] 如果您分解第一个,您的类定义将类似于:

class Event
{
    public:
    typedef int32_t type;
    typedef Event event_obj_type;
    .....  
}
于 2013-09-24T15:53:11.287 回答