前一篇发布出来之后,我看着阅读量还是挺多的,就是评论和给意见的一个都没有,或许各位看官就跟我一样,看帖子从不回复,只管看就行了。毕竟大家都有公务在身,没太多时间,可以理解。不过没关系,我是不是可以直接想象为我写的东西还挺不错的,KeKe~~。

  

  这一篇介绍一下源代码 ./src/uvw/emitter.hpp 里的东东。由于代码量实在比较大,我就折叠起来了,不然各位看官手指头滚上滚下的,太累了。之后我就写到哪儿贴哪儿的代码,注个大概源代码的位置,有兴趣自己打开源代码对照看看,是不是看的就比较舒服点了。

 emitter

 

一、语言层面的一些好玩的东东

  1、(源文件大概 第161行 —— 第185行)

复制代码
 1     static std::size_t next_type() noexcept {  2         static std::size_t counter = 0;  3         return counter++;  4     }  5  6     template<typename> 7     static std::size_t event_type() noexcept {  8         static std::size_t value = next_type();  9         return value; 10     } 11 12     template<typename E>13     Handler<E> & handler() noexcept { 14         std::size_t type = event_type<E>(); 15 16         if(!(type < handlers.size())) { 17             handlers.resize(type+1); 18         } 19 20         if(!handlers[type]) { 21            handlers[type] = std::make_unique<Handler<E>>(); 22         } 23 24         return static_cast<Handler<E>&>(*handlers[type]); 25     }
复制代码

  1.1、static

    其实说到static,大家看到这里的人应该都不会陌生,比如static函数,static变量等等。也都知道他们的特性,我就不过多说了。

    在这里,大家请看第1行——第10行,有一个是静态函数,第二个则是一个函数模板,函数体里分别声明定义了两个静态变量,我们讨论的就是函数模板里的静态变量。看下面的例子:

复制代码
 1 template<typename> 2 static std::size_t event_type() noexcept {  3     static std::size_t value = 0;  4     return value++;  5 }   6  7