LikesProgram 是一个 现代 C++(C++20)通用基础设施库,目标不是“做大而全的框架”,而是提供一组工程中反复会用到、但标准库没给全、第三方库又太重的基础组件。
它更像一个“工具箱”:每个模块都可以单独使用,也可以自然地组合在一起,适合写 服务端程序、基础设施、工具链、长期维护的工程。
项目强调:
- 明确的所有权与生命周期(避免隐式魔法)
- 可测试性(
include/test中提供大量使用示例) - 接近 STL / 标准库的接口风格
- 跨平台(Windows / Linux)
-
确保已安装 CMake(≥ 3.15),以及 C++20 语言支持
-
在项目根目录下新建一个
build目录并进入:mkdir build cd build -
运行 CMake 配置命令:
cmake ..
常用选项:
-DBUILD_SHARED_LIBS=[ON|OFF]是否生成动态库(ON)或静态库(OFF),默认:ON(动态库)。-DENABLE_EXAMPLES=[ON|OFF]是否构建示例程序LikesProgramDemo,默认:OFF。-DENABLE_STRICT_WARNINGS=[ON|OFF]是否开启编译器严格警告,默认:ON。
-
如需修改安装路径,可编辑
build/cmake_install.cmake文件,将CMAKE_INSTALL_PREFIX设置为目标安装目录。 -
编译并安装:
-
配置
cmake -S ./LikesProgram -B build -DBUILD_SHARED_LIBS=OFF -DENABLE_EXAMPLES=ON -DENABLE_STRICT_WARNINGS=ON -DCMAKE_CXX_COMPILER=g++-11
Windows可以使用以下代码,或是直接使用Visual Studio构建"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -S .\LikesProgram -B build -DBUILD_SHARED_LIBS=OFF -DENABLE_EXAMPLES=ON -DENABLE_STRICT_WARNINGS=ON
-
编译
cmake --build build -j
-
安装
- 需要先修改
build目录中的cmake_install.cmake中的安装目录set(CMAKE_INSTALL_PREFIX "/home/makeos/Desktop/LikesProgram/bin")
cmake --build build --target install
- 需要先修改
- 安装完成后,在
CMAKE_INSTALL_PREFIX目录下会看到:include/ # 头文件 lib/ # 库文件 (LikesProgram.lib / LikesProgram.dll 或 .a / .so)
- 在项目中包含头文件:
#include <LikesProgram/String.hpp> #include <LikesProgram/Timer.hpp> // ...
- 链接库:
- Windows (MSVC):
target_link_libraries(your_target PRIVATE LikesProgram)
- Linux/macOS:
g++ main.cpp -I/path/to/include -L/path/to/lib -lLikesProgram
- Windows (MSVC):
- 1. String(Unicode 字符串)
- 2. StringFormat(类型安全的格式化系统)
- 3. Math(向量与数学工具)
- 4. Metrics(指标系统)
- 5. Threading(线程池)
- 6. Time(时间工具)
- 7. Logger(日志系统)
- 8. System / Utils(系统与通用工具)
- 9. Configuration(配置管理)
- 10. Net(基于Rector模型的网络库)
路径:include/LikesProgram/String.hpp
String 是 LikesProgram 的核心组件之一,提供 工程级可用的 Unicode 字符串抽象。
特性:
- 原生支持 UTF-8 / UTF-16 / UTF-32
- 提供高效、可缓存的编码转换能力
- Unicode 感知的 length / substr / case 转换
- 可直接用于日志、格式化、配置、指标等模块
设计目标是: 在真实工程中可靠使用的 Unicode 字符串,而不是演示性质的封装。
示例:
include/test/StringTest.hppinclude/test/UnicodeTest.hpp
路径:include/LikesProgram/stringFormat/*
StringFormat 是一个 与 LikesProgram::String 深度集成的格式化系统,用于构建类型安全、可扩展的字符串格式化能力。
特性:
- 支持类似
{}的格式化语法 - 支持 Unicode 对齐、填充与宽度计算
- 支持按类型、按名称注册自定义格式化器
你可以为自定义类型定义格式化规则,而无需在业务代码中散落 toString()。
示例:
include/test/StringFormatTest.hpp- 语法说明:
LikesProgram String Format 规范 v0.1.md
路径:include/LikesProgram/math/*
Math 模块提供一组 面向工程场景的数学类型与算法,补充 STL 未覆盖的常用能力。
特性:
- 向量类型:
Vector/Vector3/Vector4 - 完整的算术与比较运算符
- Dot / Cross / Normalize / Rotate / Slerp 等常用操作
- 多数计算提供 epsilon 感知的安全版本
同时提供:
PercentileSketch:高性能分位数统计结构 适用于 Metrics / Summary 等统计场景
示例:
include/test/VectorTest.hppinclude/test/Vector3Test.hppinclude/test/PercentileSketchTest.hpp
路径:include/LikesProgram/metrics/*
Metrics 是一个 面向长期运行服务的工程级指标系统,而非简单计数工具。
支持的指标类型:
Counter:单调递增计数Gauge:可增可减的瞬时值Histogram:桶统计Summary:分位数 + EMA + Min / MaxRegistry:指标注册与集中管理
特性:
- 线程安全
- 支持 Prometheus / JSON 导出
- 可与 ThreadPool 等模块自然集成
示例:
include/test/MetricsTest.hpp
路径:include/LikesProgram/threading/*
Threading 提供一个 可观测、可配置的线程池实现,适合用于服务端和基础设施代码。
特性:
- 可配置线程数与任务队列策略
- 支持任务拒绝与回退策略
- 内建 Metrics(任务数、拒绝数、队列长度、执行耗时)
- 支持 Observer 机制(
IThreadPoolObserver)
这是一个面向工程可维护性的选择,而不是最小实现。
示例:
include/test/ThreadPoolTest.hpp
路径:include/LikesProgram/time/*
Time 模块提供统一、精度明确的时间相关工具。
组件:
Time:统一时间表示Timer:高精度计时工具(纳秒级)
常用于:
- 性能统计
- Metrics 数据采集
- 调试与 profiling
示例:
include/test/TimerTest.hpp
路径:include/LikesProgram/Logger.hpp
Logger 是一个 轻量级、可扩展的日志系统,适合在基础设施库中使用。
特性:
- 多级别日志支持
- 与 String / StringFormat 深度集成
- 不强绑定具体后端,便于嵌入其他系统
示例:
include/test/LoggerTest.hpp
路径:include/LikesProgram/system/*
System / Utils 提供一组工程中常见、但标准库未直接提供的系统级工具。
包括但不限于:
- 线程命名
- UUID 生成
- 本机 IP / MAC 信息获取
这些工具用于减少重复实现,而非形成独立框架。
路径:include/LikesProgram/Configuration.hpp
Configuration 是一个 结构上类似 JSON 的配置对象模型,用于在程序运行期以统一、类型安全的方式组织和访问配置数据。
特性:
- 支持键值对象、数组以及基础类型(int、int64_t、double、bool、String)
- 支持任意层级的嵌套结构
- 提供线程安全的访问语义、显式类型转换与迭代器遍历能力
- 内置一个 轻量级的 JSON 序列化与反序列化实现,适用于基础配置读写场景
设计说明:
- 内置 JSON 支持以简洁、可控为目标,不追求完整规范覆盖
- 对于复杂或严格的配置解析需求,建议使用外部解析库并映射到 Configuration 对象中
示例:
include/test/ConfigurationTest.hpp
路径:include/LikesProgram/net/*
Metrics 是一个 面向长期运行服务的工程级指标系统,而非简单计数工具。
支持的指标类型:
Server:服务器类Client:客户端类Connection:消息处理基类Buffer:网络传输数据
特性:
- 事件驱动
示例:
include/test/ServerTest.hpp
include/test/* 在 LikesProgram 中具有非常明确的定位:
示例优先,其次才是测试。
它们的主要目的不是追求测试覆盖率,而是:
- 展示真实、推荐的使用方式
- 固化接口语义(行为即文档)
- 防止接口在重构中发生“悄然变味”
换句话说,test 目录就是 README 的延伸部分。
本 README 不再提供“可运行示例代码块”。
原因很简单,也很工程化:
- LikesProgram 的接口在演进中
include/test/*中的代码是 唯一权威、始终与实现同步的真实用法- README 中的“示例代码”一旦与 test 出现偏差,就会变成误导
因此,本 README 的职责被明确限定为:
- 解释每个模块解决什么问题
- 指出应该查看哪个 test 文件来学习真实用法
- 说明接口的语义与设计约束
而不是重复维护一套“看起来能用、但可能已经过期”的示例。
对于任何模块,推荐的顺序是:
include/LikesProgram/xxx.hpp // 接口定义
include/test/xxxTest.hpp // 实际用法(权威)
README.md // 设计背景与模块关系
include/test 中的代码具备以下特性:
- 可以直接编译
- 使用的是当前版本的真实 API
- 展示的是作者期望的使用方式
这是一个刻意的设计选择,而不是偷懒:
- LikesProgram 是基础设施库,而不是单文件 header-only 工具
- 接口往往需要与多个模块组合使用
- 脱离 test 场景的“简化示例”容易掩盖真实约束
如果你希望:
- 示例 一定能编译
- 示例 不会因为版本更新而过期
那么 test 就是示例本身。
- 本项目仍在持续演进
include/test中的用法具有最高优先级- README 保证描述语义与设计原则,但不承诺示例级 API 稳定
如果你在使用过程中发现:
- README 描述与 test 行为不一致
请以 test 为准,README 会随后更新。
LikesProgram 的文档策略是: 行为在 test 中,思想在 README 中。
本库采用 BSD 3-Clause License,详见 LICENSE 文件。 Licensed under the BSD 3-Clause License. See LICENSE for details.