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>
”是什么意思?带<>的类名,我以前从未见过。有人可以启发我吗?谢谢
您可能熟悉函数模板。这个:
Event<ID, ID_TYPE>
是一个类模板。与函数模板实例化不同,函数本身的参数帮助编译器推断模板类型参数,对于类模板,您必须显式传递模板类型(在尖括号中)。
事件是一个模板:在编译时创建类似类的模式。如果您在代码的某些地方制作: 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;
.....
}