- 博客(503)
- 资源 (36)
- 收藏
- 关注
原创 C++单例模板:使用宏函数实现
在我们日常开发中,无可避免需要使用单例模式进行设计类对象,那么实际上我们写单例格式基本都是一样的,那么每次都要写几乎一模一样的代码来实现我们需要的单例对象是不是会觉得很累?
2022-11-30 20:30:07 735
原创 Libuv 源码解析 - QUEUE(双向循环队列)
Libuv中的高效双向循环队列结构是使用C语言构建,且所有方法均使用宏定义实现。Libuv中该结构使用指针数组构建而成,其中指针数组中只包含两个元素,类型均为void*类型,分别表示next、prev指针。我们联想双链表这类结构,不是应该还包含一个value类型吗?Libuv中QUEUE结构直接使用指针偏移来指向value。每一个节点尾部是一个QUEUE类型,通过向上偏移sizeof(节点类型) - sizeof(QUEUE)大小个字节来获得value。
2022-11-06 21:18:11 482
原创 IOCP模型C++服务端-接收客户端数据并响应客户端,同时管理所有客户端句柄
在连接上的socket上发送数据。shutdown函数禁止一个socket发送数据或者接收数据。s,所要操作的句柄(文件描述符)。如果执行成功,则返回0。否则,返回套接字错误的值,并通过调用WSAGetLastError()函数来检测错误代码。因为socket是双向的,client和发server都可以进行input和output,但是有时候我们需要数据在socekt上进行单向传输,即数据往一个方向传输。单向的socket为半开放的socket。而要实现半开放式,需要用到shutdown()函数。...
2022-07-14 21:01:49 1431
原创 C++ 中缀表达式转后缀表达式(两种方式:栈、二叉树)
C++ 中缀表达式转后缀表达式关于后缀表达式如何计算,这里不做过多叙述。以下提供两种方式供参考,第二个种方式粗略的写了计算方式。方式一该方式主要是通过栈的数据结构,规定运算符的优先级进行处理即可。参考链接:https://blog.csdn.net/liudongdong19/article/details/80767156源码(C++)#include <iostream>#include <map>#include <string>#incl
2022-04-28 17:29:26 3056
原创 C语言dll动态链接库
C语言dll动态链接库vs中dumpbin工具的使用参考链接:https://blog.csdn.net/DoronLee/article/details/78284837 用vs生成的.obj文件、.lib库、.dll动态链接库、.exe执行文件,如果想查看其中这些文件或库包含哪些函数(比如.dll库有哪些导出函数)以及相关的信息(符号清单),可以通过vs自带的dumpbin工具来完成。 dumpbin.exe为Microsoft COFF二进制文件转换器,它显示有关通用对象文件格式(CO
2022-04-20 21:18:11 2255
原创 C++ select模型聊天室初版
C++ select模型聊天室初版需要了解知识点memmove与memcpy的区别 memmove可以防止内存重叠。 比如:abcdef,目前需要删除ab,然后将cdef往前移动,有些系统的内存移动机制可能存在从后往前移动,比如先把f移动到d所在位置,然后将e移动到c所在位置,但是当我们要把d移动到b所在位置的时候,我们发现d已经是f了,也就变成了把f移动到b,同理本来是把c移动到a所在位置,却变成了把e移动到a所在位置,最终的数据移动操作变成了efef。 而memmove可以强制要求从前往
2022-04-13 20:24:51 674
原创 C++ 堆栈结构(超详解)
C++ 堆栈结构参考文章:http://blog.chinaunix.net/uid-23860671-id-150568.html在C语言中的四大存储区。栈,由编译器自动分配释放堆,一般由程序员分配释放,若程序员不释放,程序结束时由OS回收。全局区(静态区),全局变量和静态变量的存放是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另外一块区域。程序结束进行释放。常量区,程序结束释放。int a = 0; 全局初始化区char *p1
2022-04-13 17:15:20 4041
原创 C++ select模型详解(多路复用IO)
C++ select模型详解(多路复用IO)TIPS:以下内容纯属博主自主查阅资料并结合个人理解得出,各位读者仅做参考即可。关于其它的IO模型可参考链接(阻塞I/O、非阻塞I/O、多路复用I/O、信号I/O、异步I/O):引言 在什么情况下需要使用select模型呢?阻塞I/O问题我们可以使用多线程处理或者将阻塞I/O改为非阻塞I/O,系统调用之后就返回结果,可是完成I/O(即获取数据),我们不得不使用polling(轮询),可每次轮询都是一次系统调用,这将导致一些情况下非阻塞I/O甚至不
2021-11-25 22:42:18 2738
原创 游戏开发之C++类中的static、const梳理总结(C++基础)
游戏开发之C++类中的static、const梳理总结(C++基础)TIPS:一个空类的内存大小为1个字节。static、const部分知识来源【点击跳转】 class B { }; //sizeof(B) = 11.类中的静态成员(static)类中的静态成员包括静态成员函数和静态成员变量。1.1 静态成员函数①不需要类对象便可直接调用,注意静态成员函数不能直接访问成员变量、成员函数及const成员变量及const成员函数。只能访问静态成员变量、类的构造函数和析构函数。②类的
2021-08-24 23:05:56 580 6
原创 游戏开发之C++引用(C++基础)
游戏开发之C++引用(C++基础)C++引用知识大部分知识点来源地【点击跳转】一、引用的基础概念 引用是C++对C的重要扩展。用于对指针的安全使用。引用就是一个变量的别名(小名),可以采用不同的变量名,控制同一片内存空间。语法:数据类型 &变量名 = 变量名;注意点:引用在声明的时候务必要初始化(一个引用可以作为另一个新引用的初始化)。 int a2 = 200; int &b2 = a2; int &b3 = b2; b2 = 500; Test
2021-08-21 00:04:20 607 3
原创 人生节点之大学经历
大学毕业已经有接近一个多月了,同时也有一段时间没有发博客了,趁着这个是机会,是时候也该梳理一下自己的大学四年时光了。就好像前一刻还是刚刚步入大学同时对未来充满期盼的少年,转眼间就已经作为一个上班族在忙碌了。前段时间一直为了工作在忙碌,这会已经短暂地停下自己的脚步,来梳理一下自己的大学时光啦。应该怎么描述我这大学四年呢?应该从何说起呢?在刚步入大学的时候,普通家境甚至还有一点糟糕的我就已大学毕业做一个打工人而奋斗为目标,最终也实现了这么一个目标,成为了一个普通的打工人。
2023-07-17 00:06:12 4668 1
原创 Lua 开发过程中常见坑
G表是Lua全局表,所有Lua中定义的函数和变量都在其中可以找到,所以通过_G表找到的next为Lua语法中的next。而。原型为:next(table[,index])。参数1是table,参数2为可选填的索引值,若缺省则默认为0。语法为:从参数2(index)的后一位开始遍历参数1(table),直至遇到,返回值有两个:索引,值。如果遍历完整个表都没有 遇到非nil的值,那么返回nil。
2023-03-20 21:01:30 5940 1
原创 C++与Lua交互实例 -- 矩阵的加减乘除(版本二)
下面两个方式矩阵的数据都来源于C++端,只是第一种是在C++端进行结果比较展示,第二种方式(userdata)是在lua端进行结果比较展示...
2023-02-09 21:39:54 1977
原创 C++与Lua交互实例 -- 矩阵的加减乘除(版本一)
该案例的主要目的是使用矩阵的加减乘除这个功能来练习C++与Lua之间的交互(在这个过程中,CppToLua表示矩阵的数据来源于C++端,然后让Lua使用Lua的矩阵运算逻辑进行计算并返回结果给C++端。C++端使用自己定义的C++矩阵类进行本地矩阵运算,然后与lua端返回的矩阵运算结果进行比对展示。LuaToCpp同理,与CppToLua相反。表示矩阵的数据来源于lua端,然后调用C++端暴露给Lua端的API创建C++矩阵类实例,并进行矩阵运算。
2023-02-09 21:34:25 1318 1
原创 C++类对象与Lua之间的交互
C语言与Lua进行交互,我们可以相对轻易的做到,但在实际应用中我们更加偏向于使用C++与Lua进行交互,面向对象编程。
2023-02-02 17:50:24 326
原创 Lua 垃圾回收
Lua 采用了自动内存管理。这意味着你不用操心新创建的对象需要的内存如何分配出来, 也不用考虑在对象不再被使用后怎样释放它们所占用的内存。Lua运行了一个来收集所有(即在Lua中不可能再访问到的对象)来完成自动内存管理的工作。Lua中所有用到的内存,如:字符串、表、用户数据、函数、线程、 内部结构等都服从自动管理。Lua实现了一个增量标记-扫描收集器。它使用这两个数字来控制垃圾收集循环:垃圾收集器间歇率和垃圾收集器步进倍率。这两个数字都使用百分数为单位 (例如:值 100 在内部表示1)。
2023-01-29 21:37:52 779
原创 Lua 调试(Debug)
Lua 提供了 debug 库用于提供创建我们自定义调试器的功能。Lua 本身并未有内置的调试器,但很多开发者共享了他们的 Lua 调试器代码。crl输出结果:在以实例中,我们使用到了 debug 库的 traceback 和 getinfo 函数, getinfo 函数用于返回函数信息的表。我们经常需要调试函数的内的局部变量。我们可以使用 setupvalue 函数来设置这些局部变量。输出结果:在以上实例中,计数器在每次调用时都会自增1。
2023-01-29 21:36:18 1280
原创 Lua 错误处理
程序运行中错误处理是必要的,在我们进行文件操作,数据转移及web service 调用过程中都会出现不可预期的错误。如果不注重错误信息的处理,就会造成信息泄露,程序无法运行等情况。任何程序语言中,都需要错误处理。
2023-01-29 21:30:48 515 1
原创 Lua 文件I/O
Lua I/O 库用于读取和处理文件。分为简单模式(和C一样)、完全模式。简单模式在做一些简单的文件操作时较为合适。但是在进行一些高级的文件操作的时候,简单模式就显得力不从心。例如同时读取多个文件这样的操作,使用完全模式则较为合适。
2023-01-29 21:27:29 1181
原创 Lua 模块与包
模块类似于一个封装库,从 Lua 5.1 开始,Lua 加入了标准的模块管理机制,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用,有利于代码的重用和降低代码耦合度。 Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。以下为创建自定义模块 module.lua,文件代码格式如下: 由上可知,模块的结构就是一个 table 的结构,因此可以像操作调用
2023-01-29 21:24:41 504
原创 Lua table(表)
Lua table 使用关联型数组,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。Lua table 是不固定大小的,你可以根据自己需要进行扩容。Lua也是通过table来解决模块(module)、包(package)和对象(Object)的。
2023-01-29 21:22:53 589
原创 Lua 迭代器
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。在 Lua 中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。
2023-01-29 21:20:42 839
原创 Lua 字符串
字符串或串(String)是由数字、字母、下划线组成的一串字符。转义字符用于表示不能直接显示的字符,比如后退键,回车键等。如在字符串转换双引号可以使用 “\”"。
2023-01-28 21:48:34 1001
原创 Lua 运算符 - 较为特殊部分
在 lua 中,**/** 用作除法运算,计算结果包含小数部分,**//** 用作整除运算,计算结果不包含小数部分...
2023-01-28 21:46:53 722
原创 Lua 函数 - 可变参数
调用select时,必须传入一个固定的实参selector(选择开关)和一系列参数。如果selector为数字n,那么select返回参数列表中从索引n开始到结束的所有参数列表,否则只能为字符串。Lua函数可以接收可变数目的参数,和C语言类似,在函数参数列表中使用三点。同时我们可以将可变参数赋值给一个变量。,这样select返回变长参数的总数。表示函数有可变的参数。输出结果与上述一样。
2023-01-28 21:41:50 2267
原创 Lua 变量
变量在使用前,需要在代码中进行声明,即创建该变量。变量需要标识类型是因为编译程序执行代码之前需要知道如何给语句变量开辟存储区,用于存储变量的值。Lua变量有三种类型:全局变量、局部变量、表中的域。Lua 中的变量全是全局变量,哪怕是在语句块或是函数里,除非使用显式声明为局部变量。局部变量的作用域为从声明位置开始到所在语句块结束。
2023-01-28 21:39:44 1009
原创 Lua 协同程序(coroutine)
Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。协同有非常强大的功能,但是用起来也很复杂。
2023-01-28 21:38:30 548
原创 Go语言条件语句
条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行执行语句,并在条件为false的情况下执行另外的语句。
2023-01-16 11:44:02 521
原创 Go语言常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量。常量中的数据类型值可以是布尔型、数字型(整数型、浮点型、复数)和字符串型。你可以省略类型说明符[type],因为编译器可以根据变量的值来推断其类型。数字0、1、2分别代表未知性别、女性和男性。常量可以用len()、cap(),unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不能通过。
2023-01-16 11:40:41 538
原创 Go语言变量
变量来源于数学,是计算机语言中能存储计算结果或能表示值抽象概念。变量可以通过变量名访问。Go语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。test 1 2。
2023-01-16 11:38:57 332
原创 Go语言数据结构
在Go编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,觉可以充分利用内存。
2023-01-16 11:36:50 754
原创 Go语言基础语法
在Go程序中,一行代表一个语句结束。一个遍师傅实际上就是一个或是多个字母(A~Z和a~z)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。Go程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。Go语言使用fmt.Sprintf和fmt.Printf格式化字符串并赋值给新串。程序中可能会使用到这些分隔符:括号(),中括号[]和大括号{}程序一般由关键字、常量、变量、运算符、类型和函数组成。程序中可能会使用到这些标识符号:.、,、;6个标记是(每行一个)
2023-01-16 11:35:32 2908
原创 Go语言结构
使用的go版本为1.19.4,同时使用go env命令需要明确注意以下字段为打开模式。此时在main.go界面运行即可成功编译通过。
2023-01-11 17:53:02 451
原创 进阶对象池(不使用智能指针版)
进阶对象池(不使用智能指针版),使用智能指针实现对象池需要极其了解智能指针的特性,故参考GitHub上相关源码,封装一个不基于智能指针的对象池版本。该版本对象池的总体架构是不管一个对象是否被外部使用,本对象池仍然管理该对象。而有一些对象池的实现是只要外部使用,那么本对象池在那段时间是不记录该对象的。
2023-01-09 19:32:44 170
Postman中文版(http模拟器)
2022-07-05
魔塔DOS小游戏V3.0(C语言)
2022-05-03
Cocos2d-xV3.17.2 win32平台下模板源码详注
2022-01-07
橡皮怪勇闯地下城CocosCreator 2D小游戏
2021-12-14
小鸟闯管道CocosCreator 2D小游戏
2021-12-14
uniapp web客户端及mqtt+http服务端(express)实例
2021-12-13
商用级uniapp图表
2021-10-06
C#使用8张风扇png图片进行动态旋转,即制成一个可开关的风扇gif图片
2021-10-06
配置文件V3.0版本,主要使用C语言实现
2021-08-18
配置文件V2.0版本,主要使用C语言实现
2021-08-18
学生管理系统V1.0,主要使用C语言实现
2021-08-17
微软记事本软件升级版,适用于程序员群体
2021-08-11
2048小游戏V3.0(C语言实现),涵盖C语言的所有基础知识(二进制文件存储)
2021-08-10
2048小游戏V2.0(C语言实现),涵盖C语言的知识直至文本文件存储
2021-08-10
SnackGame贪吃蛇小游戏V3.0(C语言实现),涵盖C语言所有基础知识(二进制文件存储)
2021-08-10
SnackGame贪吃蛇小游戏V2.0(C语言实现),涵盖C语言的知识直至文本文件存储
2021-08-10
魔塔游戏基础版,使用C语言基础知识实现
2021-08-07
魔塔游戏,使用C语言实现,丰富的框架架构设计,覆盖C语言所有的知识点
2021-08-07
express框架及node.js搭建服务端(后端)原型,数据库存储数据
2021-08-03
魔塔V2.0版本,主要使用C实现
2021-08-03
C语言魔塔游戏基础核心架构(使用C语言实现多态)
2021-07-28
C语言实现魔塔游戏V1.0
2021-07-28
express框架及node.js搭建服务端(后端)原型,数据存储于json文件(可扩充至数据库)
2021-07-24
双链表实现(所有代码均使用C语言回调函数实现及存储数据均使用void*、void**实现)
2021-07-20
动态数组实现(所有代码均使用C语言回调函数实现及存储数据均使用void*、void**实现)
2021-07-20
2048控制台游戏GameV1.0
2021-07-12
控制台贪吃蛇小游戏V1.0
2021-07-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人