你最哪些推荐的 C/C++ 程序库,为什么?
来几个不常见但是很变态的库吧
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
前端的世界总是在不断变化,作为开发者,我们需要保持好奇心和学习热情,不断探索新的技术,只有这样,我们才能在这个快速发展的时代中立于不败之地。低代码也是一个值得我们深入探索的领域,让我们拭目以待,它将给前端世界带来怎样的变革。
介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。
JNPF 可以实现应用从创建、配置、开发、测试到发布、运维、升级等完整生命周期的管理。减少了传统应用程序的代码编写量,通过图形化、可视化的界面,以拖放组件的方式,即可快速生成应用程序的产品,大幅降低了开发企业管理类软件的难度。
希望这篇文章对你有所帮助~
评论