聊天讨论 可以补充一些吗?C/C++ 程序库

jinchanchan(金蝉蝉) · 2024年06月05日 · 最后由 jinchanchan 回复于 2024年06月05日 · 76 次阅读

来几个不常见但是很变态的库吧:

bundle: 把几乎所有常见的压缩库封装成了一个库, 接口完全统一, 想用哪个用哪个.

就一个 h 和一个巨 TM 大的 cpp 文件,巨好使巨方便.

r-lyeh-archived/bundle

Celero: 简单清晰的 benchmark 库, 特点就是简单易用没有废话.

DigitalInBlue/Celero

getopt: 解析命令行输入参数的库, 好使! 没废话! 就俩文件.

r-lyeh-archived/getopt

stb_image: 常见图片格式加载库, 就一个巨大无比的头文件

stb_truetype: 常见字体加载库, 就一个巨大无比的头文件, 觉得 freetype 大的可以用它.

都在这: nothings/stb

better-enums: 编译期实现的 enum 扩展功能,包括 enum 和字符串互转等等. 感觉比较重量级, 我一般是不用的, 但有时候没它还真是别扭, 尤其是需要把一个 enum 序列化的时候.

aantron/better-enums

Catch2: 著名的单元测试框架, 那么它和 boost 或者 google 的单元测试框架有什么不同呢?

就在于它首先是 header only 的, 其次是没有废话,直击要害! 你要测试对吧? 给你!

catchorg/Catch2

uchardet: 实现猜字符串编码的功能, 例如输入一个不知道编码的文本文件, 它可以帮你"猜" 这个文件的编码是什么. 和 python 里的 uchardet 功能基本一样.

BYVoid/uchardet

win-iconv: iconv 库是一个字符集编码转换的库, 在 linux 和 mac 下均是原生字符转换库. 但 windows 上并不是自带的. 那么就会导致在 windows 上编译 iconv 有点浪费. 因为 windows 显然已经自带字符集转换的功能了. 那么这个库的作用就是用 windows api 来实现和 iconv 库一模一样的接口. 这样编译出来比较小. 从此字符转换不是梦.

win-iconv/win-iconv

freetype-gl: open gl 上实现的 freetype. 不过我个人没用过... 不知道好不好用. 但当你需要在 opengl 上下文中渲染字体的时候, 你可能用得着它.

rougier/freetype-gl

nanovg: 基于 openGL/DX/metal 的 2d 绘图库. 绘图效率高, 接口清晰. 主版本是基于 openGL 的, 但有 DX,metal 等分支. 前端接口还有 python 和 lua 的. 个人感觉不错.

memononen/nanovg

imgui: 大名鼎鼎的 imgui, 你可能会问在有一堆 GUI 框架的情况下为什么我们需要 imgui? 因为它是 immediate mode 的. 个人认为是几个 immediate mode 的 GUI 框架里最好的. 详细见它的页面介绍.

r-lyeh-archived/imgui

spdlog: logger 库, 重点推荐! 为什么呢? 因为好使! 没有废话. 而且是 header only 的.

gabime/spdlog

ffts: 很好使的 FFT 库, 和 fftw 的不同在于用着是真方便! 而且难能可贵在于速度居然真不比 fftw 慢.

linkotec/ffts

fmt: formatting 库, 又小又好使! 太好使了!

fmtlib/fmt

最后是恐怖的 Amalgamate.

vinniefalco/Amalgamate

它是干嘛的呢? 它是专门用来把其他库"封装成"一个 cpp 和一个 h 文件的工具. 比如说 freetype 里有几十个 h 几十个 cpp, 用起来觉得麻烦的话, 就写个配置文件然后用它跑一下, 立即就可以把 freetype 的这些 cpp 和 h 文件变成仅仅两个巨大无比的 cpp 和 h 文件. 再重复一遍, 巨大无比!! 这便是传说中的 unity build.... 目前 github 上已经有很多的人开始用它来封装一些常见的库了.

这样做有什么好处呢? 比如说有个库,

那么这么做好不好呢, 我也不知道. 前文中提到的 bundle 库就是用它把 N 多库合并到一个 cpp 里的.

这个工具的作者 vinniefalco 还写了 beast 库, 目前已收录进了 boost 里.

freetypeAmalgam: 利用上面的工具把整个 freetype 封装成了一个 h 和一个 cpp, 想用 freetype 又懒得编译和配置的人就把这两个文件往项目里一拖, 就可以用 freetype 了.

vinniefalco/FreeTypeAmalgam

//--------------------------------------------------

再补充几个吧:

上面说的 iconv 的 win32 实现复杂了一点, 这个更简单:

https://github.com/win-iconv/win-iconv

PFFFT: 又一个 FFT 库, 那么你也许会问它和 FFTW 相比如何呢? 它的好处就是真的很小! 两个文件往项目里一拖就行了:

https://github.com/marton78/pffft

bgfx: 超恐怖的跨平台图形渲染库, windows mac linux ios 安卓 html...跨的平台基本全了, 它的后端就更可怕了, DX, opengl, metal... 连 webgl 都有. 我不怎么搞这方面, 也不知道好不好使, 我只是觉得很牛就放这里了:

bkaradzic/bgfx

scriptorium: 这个就不算是库了, 是几乎所有你听说过的没听说过的常见用于游戏脚本的语言的 benchmark, 可以不去研究, 但不妨看看:

r-lyeh-archived/scriptorium

tinyexpr: 我特别喜欢的数学表达式解析和计算库, 真的好用而且小, 专门用来实现在程序运行时解析用户输入的数学表达式并做计算的库, 只有两个文件, 往项目里一拖就行了:

codeplea/tinyexpr

matplotcpp: 在 C++ 中绑定 python 的 matplot 库.

lava/matplotlib-cpp

需要 登录 后方可回复, 如果你还没有账号请 注册新账号