作者回复: C++要求静态成员变量必须在cpp文件里定义实现,头文件里只是声明。 而在静态成员函数里声明静态变量,再以函数返回值的形式来使用,就不需要在cpp里重复写一遍,只要在头文件里写就行了。 课程的示例代码就是这样的,你也可以自己模仿着试一下,用静态成员函数代替静态成员变量。
作者回复: uml其实并不难,也没有必要完全学通学精,本质上就是个画图。 先学会最基本的类图、时序图,其他的可以在实践中慢慢学。
作者回复: 你理解的很对,两者的区别就在这里,自旋锁的好处是不会让出cpu,busy waiting,这在小等待时的代价就比较低,可以充分利用cpu。而mutex会让线程sleep,暂时让出cpu给其他线程,这就有点浪费。 具体该用哪个还是要看应用场景,在这里我用自旋锁只是为了演示atomic的用法。
作者回复: 是的,都看zmq.hpp的源码了,很认真啊。 有了右值和转移构造,在C++里返回对象确实省了很多力气。
作者回复: 1.这个就是基本的需求分析了,简单来说,就是提取出需求里的名词和动词,转化成相应的类,比如销售记录、配置文件、锁、XX主循环。 2.UML图有很多种,这里用到的是类图,表示的是类之间的关系,需要理解UML的基本语言要素,比如聚合、联系等,然后可以随便选一个类作为起点,像爬虫一样,沿着关系链接去看它相关的类,逐步去理解这些类是如何配合工作的。
作者回复: 1. 客户端程序只是示意,直接在代码里写死了两条记录。 2.可以用gdb debug看看出错在哪里。
作者回复: 是哪个库引用的string_view?是不是新版本库引用了C++17的这个组件,如果是GitHub项目里的应该用C++14肯定能过的。
作者回复: 其实这个和hpp没有必然关系,用.h + .cpp也会有同样的问题,只要类设计合理,用好设计模式,不要出现面条类,一两千行的源文件也是可以接受的,如果再大就要考虑重构了。
作者回复: LuaRef_cast是lua bridge自己的类型转换函数,把lua数据转换C++数据。
作者回复: 我测试了一下,没有重现你说的这个问题,是不是使用的标准不对,编译时加上-std=c++14再试试。