开坑一个跨平台工具库,在C++标准化发展以来,很多大部分功能都已经可以通过std库完成跨平台编译,再者还可以通过Qt库完成跨平台编译。但是网络编程这一议题似乎一直没有被C++标准化委员会确认,之前还有风声说C++23即将有网络编程的std标准,但似乎又再次胎死腹中了。虽然Qt可以完成跨平台网络编译,但我还是希望写一套自己的标准工具库来学习一下两个平台以及跨平台库的编写方法。
同时,我会把我平时编写的模板和工具代码库放在这里面。
这是我的GitHub: https://github.com/FasterLY/Star_Tool/
本次开坑的命名空间我将其命名为:namespace star
一切有关该库的工具将在该命名空间中被调用。
本次我对这个库做一个大纲:
以下是文件大纲:
目前暂时是这几个模块:
algorithm:
我的个人算法模板模块,具备迭代器的鸭子类型即可调用,例如多线程的快排(暂时没有完成代码优化,代码效率很低)。
bytes_tool:
封装字节操作工具,一般用作字节流的工具,用于网络或者文件的流调用。
constructor:
对象序列化规范,需要序列化的对象需要继承统一接口完成序列化操作。(暂时未完善)
net_tool:
封装网络工具核心(也是我开这个坑的初衷)。封装了对于tcp、udp、ipv4、ipv6等规范的类,可以进行跨Windows和Linux 的网络基本通信,暂时未完善关于非阻塞还有紧急信号带的规范,待后续更新。
safe_container:
这个库我把它分为了两个部分,是我当时学习并发实战时的代码以及容器工具,可以用作生产需要。我把它们分为了两个部分:
mutex: 有锁容器,通过mutex完成线程安全容器
no_mutex:无锁容器,通过一些列系统原语完成无锁线程安全容器
thread_tool:
这个库我对std::thread进行了更多功能的封装,例如可中断多线程标注输入,线程中断标志设置,还有一个线程池工具,不过我暂时未对他们进行耦合操作,只有可中断线程和可中断标准输入可以耦合使用,线程池无法与可中断线程耦合使用,后续可能会进行更新。
tool:
这个文件目录下我封装了一些通用工具,例如hash函数,getter_setter编程工具,固定动态数组工具等等。
这是我对这些库文件目录的简介。
后续我会对一些单独的的文件内的库工具进行单独的阐述,并把链接放在下面:
Star_Tool: tool包下getter_setter依赖设置器(类似C#的get、set)_菜鸟小田的博客-CSDN博客
Star_Tool: star::thread 可中断标志位的扩展std::thread_菜鸟小田的博客-CSDN博客
Star_Tool: tool包下get_set依赖设置器(getter_setter退化版本,更加贴切C#的get、set调用方法)_菜鸟小田的博客-CSDN博客
这里附上更新日志:
# Star_Tool
Star个人C++跨平台工具仓库,基于C++ 20 std,若版本低于此版本可能会造成部分代码报错问题,需要将部分库和头文件剔除
简介文档链接:
https://blog.csdn.net/qq_29322325/article/details/130715160?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22130715160%22%2C%22source%22%3A%22qq_29322325%22%7D
目前bug(待修补):
优化目标:
(1)完善和支持更多tcp、udp不同平台间flag标志位和不同读取模式的支持
更新日志:
日期 更新内容
2023年5月21日 修复了C++20以下无锁queue容器抛出错误问题,完善了udp、tcp平台代码优化和功
能的完善,总结了Linux和Windows运用的差异性并进行代码缩减,优化代码长度
2022年5月22日 为无锁容器和有锁容器queue和stack添加了原位构造方法emplace,修复和完善了
无锁容器queue的内存泄漏问题,增强了其代码的线程安全性。
2022年5月22日 添加了getter_settet的退化版本get_set详见文档
2022年5月23日 完善了线程池的reserver重置线程池大小的功能,并修复了线程无法正常退出的
bug,针对VS编辑器编写了直接接口的注释,方便阅读和使用。
2022年5月28日 整体重构了tcp、tcpserver、udp、udpserver的结构,将地址结构脱离给堆管
理,降低了单个套接字的大小,可以选择将地址结构与套接字绑定后脱离处理,并添
加了socket_addr_container地址容器单独存储用于兼容,减小udp、tcp使用上的差
异性。同时支持域名解析服务,支持直接用域名创建套接字功能。