Modern C++集合
在这个仓库中, 是怎么定义 Modern
C++的?
- C++98 ❌
- C++03 ❌
- C++11 ❌
- C++14 ❌
- C++17 ❌
- C++20 ✅
- C++23 ✅
- ...
当然, 有很多库都会向前兼容较老的标准, 筛选标准是根据 "是否广泛使用了新标准中的特性" 为依据.
- TODO
⛏
C++20协程, 任务, 调度器
-
concurrentcpp: 通过使用任务、执行器和协程轻松安全地编写高并发的应用程序, 允许应用程序通过使用并行协程轻松编写并行算法
-
libfork: 一个前沿的, lock-free, wait-free, 实现任务窃取的库,建立在c++ 20的协程上
-
libasync: c++ 20的异步原语库
⛏
网络基础库/框架/开发工具, 协程, 高并发
⛏
编译期反射/运行时反射
-
reflect-cpp: 一个c++ 20库,使用反射进行快速序列化、反序列化和验证。支持JSON, BSON, CBOR, flexbuffers, msgpack, TOML, XML, YAML
-
USRefl: header-only,很小(99行)和强大的c++ 20静态反射库
-
meta.hpp: C++20动态反射库
-
reflect: C++20静态反射库
⛏
C++对象序列化/反序列化, pack/unpack, JSON
⛏
algorithm/range/sequence/collection
-
flux: 面向序列编程的c++ 20库
-
small_vectors: 优化的C++ 20/23 vector, 类内缓冲区存储的字符串, 和一些实用算法
⛏
- libunicode: 现代c++ 20 Unicode库
auto a8 = std::string{"Hello, World!"};
auto a32 = unicode::from_utf8(a8);
assert(a32 == U"Hello, World!");
// auto b8 = string { (char const*) u8"你好, 世界" };
auto b8 = std::string{"你好, 世界"};
std::cout << "b8 len: " << b8.size() << '\n';
auto b32 = unicode::from_utf8(b8);
assert(b32 == U"你好, 世界");
std::cout << "b32 len: " << b32.size() << '\n';
auto u32str = std::u32string{U"你好😃"};
auto str = unicode::to_utf8(u32str);
assert(str == "你好😃");
b8 len: 14
b32 len: 6
- consteval-huffman: 编译期huffman编码压缩(特定场景下能减少程序体积)
auto data
= "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100"_huffman;
std::cout << "压缩前大小(字节): " << data.uncompressed_size() << '\n';
std::cout << "压缩后大小(字节): " << data.compressed_size() << '\n';
std::cout << "节省空间: " << data.bytes_saved() << '\n';
std::cout << "解码后的数据: \n";
for (char c : data) {
std::cout << c;
}
压缩前大小(字节): 292
压缩后大小(字节): 187
节省空间: 105
解码后的数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
⛏
- matrix: 一个现代的,c++ 20的,单头文件dense 2D矩阵库
⛏
- peredvizhnikov-engine: 一个用c++20编写的完全无锁的游戏引擎。它在语言的协程原语之上实现了并发计算的 actor 模型。
⛏
-
yalantinglibs: 一个c++20库的集合,包括coro_rpc, struct_pack, struct_json, struct_xml, struct_pb, easylog, async_simple
-
rpp: Minimal Rust-inspired C++20 STL replacement
-
libv: C++23编写的包含大量可重用代码的库集合
-
OpenSiv3D: 一个开源框架,允许使用现代c++(C++20), 结合声音,图像和AI, 编写有趣的游戏和应用程序. 支持 Windows / macOS / Linux / Web 平台.
-
STX: 一个库和实用程序的集合,旨在使使用c++更容易,更不容易出错。