Skip to content
View likesprogram's full-sized avatar

Block or report likesprogram

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
LikesProgram/README.md

LikesProgram

简介

LikesProgram 是一个 现代 C++(C++20)通用基础设施库,目标不是“做大而全的框架”,而是提供一组工程中反复会用到、但标准库没给全、第三方库又太重的基础组件。

它更像一个“工具箱”:每个模块都可以单独使用,也可以自然地组合在一起,适合写 服务端程序、基础设施、工具链、长期维护的工程

项目强调:

  • 明确的所有权与生命周期(避免隐式魔法)
  • 可测试性(include/test 中提供大量使用示例)
  • 接近 STL / 标准库的接口风格
  • 跨平台(Windows / Linux)

使用说明

编译

  1. 确保已安装 CMake(≥ 3.15),以及 C++20 语言支持

  2. 在项目根目录下新建一个 build 目录并进入:

    mkdir build
    cd build
  3. 运行 CMake 配置命令:

    cmake ..

    常用选项:

    • -DBUILD_SHARED_LIBS=[ON|OFF] 是否生成动态库(ON)或静态库(OFF),默认:ON(动态库)。
    • -DENABLE_EXAMPLES=[ON|OFF] 是否构建示例程序 LikesProgramDemo,默认:OFF。
    • -DENABLE_STRICT_WARNINGS=[ON|OFF] 是否开启编译器严格警告,默认:ON。
  4. 如需修改安装路径,可编辑 build/cmake_install.cmake 文件,将 CMAKE_INSTALL_PREFIX 设置为目标安装目录。

  5. 编译并安装:

  • 配置

    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
  1. 安装完成后,在 CMAKE_INSTALL_PREFIX 目录下会看到:
    include/   # 头文件
    lib/       # 库文件 (LikesProgram.lib / LikesProgram.dll 或 .a / .so)
    

使用方法

  1. 在项目中包含头文件:
    #include <LikesProgram/String.hpp>
    #include <LikesProgram/Timer.hpp>
    // ...
  2. 链接库:
    • Windows (MSVC):
      target_link_libraries(your_target PRIVATE LikesProgram)
    • Linux/macOS:
      g++ main.cpp -I/path/to/include -L/path/to/lib -lLikesProgram

模块概览


1. String(Unicode 字符串)

路径:include/LikesProgram/String.hpp

String 是 LikesProgram 的核心组件之一,提供 工程级可用的 Unicode 字符串抽象

特性:

  • 原生支持 UTF-8 / UTF-16 / UTF-32
  • 提供高效、可缓存的编码转换能力
  • Unicode 感知的 length / substr / case 转换
  • 可直接用于日志、格式化、配置、指标等模块

设计目标是: 在真实工程中可靠使用的 Unicode 字符串,而不是演示性质的封装

示例:

  • include/test/StringTest.hpp
  • include/test/UnicodeTest.hpp

2. StringFormat(类型安全的格式化系统)

路径:include/LikesProgram/stringFormat/*

StringFormat 是一个 与 LikesProgram::String 深度集成的格式化系统,用于构建类型安全、可扩展的字符串格式化能力。

特性:

  • 支持类似 {} 的格式化语法
  • 支持 Unicode 对齐、填充与宽度计算
  • 支持按类型、按名称注册自定义格式化器

你可以为自定义类型定义格式化规则,而无需在业务代码中散落 toString()

示例:

  • include/test/StringFormatTest.hpp
  • 语法说明:LikesProgram String Format 规范 v0.1.md

3. Math(向量与数学工具)

路径:include/LikesProgram/math/*

Math 模块提供一组 面向工程场景的数学类型与算法,补充 STL 未覆盖的常用能力。

特性:

  • 向量类型:Vector / Vector3 / Vector4
  • 完整的算术与比较运算符
  • Dot / Cross / Normalize / Rotate / Slerp 等常用操作
  • 多数计算提供 epsilon 感知的安全版本

同时提供:

  • PercentileSketch:高性能分位数统计结构 适用于 Metrics / Summary 等统计场景

示例:

  • include/test/VectorTest.hpp
  • include/test/Vector3Test.hpp
  • include/test/PercentileSketchTest.hpp

4. Metrics(指标系统)

路径:include/LikesProgram/metrics/*

Metrics 是一个 面向长期运行服务的工程级指标系统,而非简单计数工具。

支持的指标类型:

  • Counter:单调递增计数
  • Gauge:可增可减的瞬时值
  • Histogram:桶统计
  • Summary:分位数 + EMA + Min / Max
  • Registry:指标注册与集中管理

特性:

  • 线程安全
  • 支持 Prometheus / JSON 导出
  • 可与 ThreadPool 等模块自然集成

示例:

  • include/test/MetricsTest.hpp

5. Threading(线程池)

路径:include/LikesProgram/threading/*

Threading 提供一个 可观测、可配置的线程池实现,适合用于服务端和基础设施代码。

特性:

  • 可配置线程数与任务队列策略
  • 支持任务拒绝与回退策略
  • 内建 Metrics(任务数、拒绝数、队列长度、执行耗时)
  • 支持 Observer 机制(IThreadPoolObserver

这是一个面向工程可维护性的选择,而不是最小实现。

示例:

  • include/test/ThreadPoolTest.hpp

6. Time(时间工具)

路径:include/LikesProgram/time/*

Time 模块提供统一、精度明确的时间相关工具。

组件:

  • Time:统一时间表示
  • Timer:高精度计时工具(纳秒级)

常用于:

  • 性能统计
  • Metrics 数据采集
  • 调试与 profiling

示例:

  • include/test/TimerTest.hpp

7. Logger(日志系统)

路径:include/LikesProgram/Logger.hpp

Logger 是一个 轻量级、可扩展的日志系统,适合在基础设施库中使用。

特性:

  • 多级别日志支持
  • 与 String / StringFormat 深度集成
  • 不强绑定具体后端,便于嵌入其他系统

示例:

  • include/test/LoggerTest.hpp

8. System / Utils(系统与通用工具)

路径:include/LikesProgram/system/*

System / Utils 提供一组工程中常见、但标准库未直接提供的系统级工具。

包括但不限于:

  • 线程命名
  • UUID 生成
  • 本机 IP / MAC 信息获取

这些工具用于减少重复实现,而非形成独立框架。


9. Configuration(配置管理)

路径:include/LikesProgram/Configuration.hpp

Configuration 是一个 结构上类似 JSON 的配置对象模型,用于在程序运行期以统一、类型安全的方式组织和访问配置数据。

特性:

  • 支持键值对象、数组以及基础类型(int、int64_t、double、bool、String)
  • 支持任意层级的嵌套结构
  • 提供线程安全的访问语义、显式类型转换与迭代器遍历能力
  • 内置一个 轻量级的 JSON 序列化与反序列化实现,适用于基础配置读写场景

设计说明:

  • 内置 JSON 支持以简洁、可控为目标,不追求完整规范覆盖
  • 对于复杂或严格的配置解析需求,建议使用外部解析库并映射到 Configuration 对象中

示例:

  • include/test/ConfigurationTest.hpp

10. Net(基于Rector模型的网络库)

路径:include/LikesProgram/net/*

Metrics 是一个 面向长期运行服务的工程级指标系统,而非简单计数工具。

支持的指标类型:

  • Server:服务器类
  • Client:客户端类
  • Connection:消息处理基类
  • Buffer:网络传输数据

特性:

  • 事件驱动

示例:

  • include/test/ServerTest.hpp

关于 include/test

include/test/* 在 LikesProgram 中具有非常明确的定位

示例优先,其次才是测试

它们的主要目的不是追求测试覆盖率,而是:

  • 展示真实、推荐的使用方式
  • 固化接口语义(行为即文档)
  • 防止接口在重构中发生“悄然变味”

换句话说,test 目录就是 README 的延伸部分


使用示例与 test 目录的关系说明(重要)

本 README 不再提供“可运行示例代码块”。

原因很简单,也很工程化:

  • LikesProgram 的接口在演进中
  • include/test/* 中的代码是 唯一权威、始终与实现同步的真实用法
  • README 中的“示例代码”一旦与 test 出现偏差,就会变成误导

因此,本 README 的职责被明确限定为:

  • 解释每个模块解决什么问题
  • 指出应该查看哪个 test 文件来学习真实用法
  • 说明接口的语义与设计约束

而不是重复维护一套“看起来能用、但可能已经过期”的示例。


如何正确学习和使用 LikesProgram

先看 test,而不是 README 示例

对于任何模块,推荐的顺序是:

include/LikesProgram/xxx.hpp   // 接口定义
include/test/xxxTest.hpp       // 实际用法(权威)
README.md                      // 设计背景与模块关系

include/test 中的代码具备以下特性:

  • 可以直接编译
  • 使用的是当前版本的真实 API
  • 展示的是作者期望的使用方式

为什么 README 不直接给完整示例代码

这是一个刻意的设计选择,而不是偷懒:

  • 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.

Popular repositories Loading

  1. LikesProgram LikesProgram Public

    LikesProgram 是一个 C++ 通用工具库,提供丰富、高效且易用的类库和工具函数,帮助开发者在各种项目中减少重复代码、提升开发效率,并保证性能和可扩展性。

    C++ 1

  2. LikeOS LikeOS Public

    操作系统制作练习

    C++

  3. NovaMail NovaMail Public

    NovaMail

    C++