因为这段时间在忙其他的事情,从上一部分到现在时间已经比较长了。写这个时候学到了很多c++的内容,感觉都蛮实用的。
首先是枚举类型enum,去看了c++primer的讲解,记住的主要内容是enum class相较于enum而言,限定了作用域,而且enum声明的枚举类型可以像int类型一样直接进行计算。Cherno大佬解释了为什么category用自己定义的BIT来生成相应的类型编号,这样就可以直接对两种eventcategory进行&或者|的操作,判断两个event的category是否相同或者让一个event具有多种category。
然后便是宏定义了,EVENT_CLASS_TYPE(type),一个宏定义了三个函数,这样在写子类的时候,一个用这样一个宏就可以声明出这些函数,写起来方便了很多。每一段最后的 \ 是一个连接符,因为#define的内容必须在一行内写完,而当一行的内容实在是太长时可以在一段的最后加上 \ 然后在下一行继续写,这样的话在编译的时候,编译器还是会将 \ 前后的内容当作一行处理,起到了连接符的作用。单井号 # 可以将后面所接的部分转化为字符串类型,起到了像是强制类型转换的作用吧,这就是为什么对于const char* 类型的GetName函数,可以直接将#type作为结果返回。双井号 ## 是起到连接作用,假如在#define的宏定义中写a##b,那编译器就会处理成ab,不过这个图里倒是没有用到双井号。
大佬定义的EventDispatcher类这次我先没有实现,想等具体用了这个类,根据实例体会了它的作用再自己手写一遍。