{"id":23862758,"url":"https://github.com/hengxin666/hxtest","last_synced_at":"2026-03-09T13:05:36.274Z","repository":{"id":270080242,"uuid":"909273009","full_name":"HengXin666/HXTest","owner":"HengXin666","description":"现代C++学习、实验、实践 | 个人代码存储库 (内有 C++20无宏反射、tbb并发库的初步学习、std标准库的重现(一点点)、QT-QML、OpenGL、Linux-io_uring/win32-iocp+协程、线程池等) 注释清晰完善","archived":false,"fork":false,"pushed_at":"2025-11-16T08:43:21.000Z","size":13556,"stargazers_count":4,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-16T10:18:54.998Z","etag":null,"topics":["cpp","cpp20"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HengXin666.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-28T07:48:53.000Z","updated_at":"2025-11-16T08:43:25.000Z","dependencies_parsed_at":"2025-05-08T16:34:32.204Z","dependency_job_id":"80e6cdab-2a8e-4513-9aaf-31daaff0d4b4","html_url":"https://github.com/HengXin666/HXTest","commit_stats":null,"previous_names":["hengxin666/hxtest"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/HengXin666/HXTest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HengXin666%2FHXTest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HengXin666%2FHXTest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HengXin666%2FHXTest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HengXin666%2FHXTest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HengXin666","download_url":"https://codeload.github.com/HengXin666/HXTest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HengXin666%2FHXTest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30297111,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T11:12:22.024Z","status":"ssl_error","status_checked_at":"2026-03-09T11:10:54.577Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","cpp20"],"created_at":"2025-01-03T07:23:52.618Z","updated_at":"2026-03-09T13:05:36.260Z","avatar_url":"https://github.com/HengXin666.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\" style=\"color:yellow\"\u003eHXTest\u003c/h1\u003e\n\nHeng_Xin 学习C++, 并且做实验所使用的项目.\n\n\u003e [!TIP]\n\u003e 部分内容是以前写的, 会带有 `_大写`, `__*` 命名风格; 这是 UB 的 ([cppreference: identifiers](https://en.cppreference.com/w/cpp/language/identifiers.html)); 但是太多了, 这里仅是我实验使用的罢了. 基本上写了就不会再看了. 有用的会被迁移到其他地方, 不会继续更新了. 日后绝对不会这样写了~\n\u003e\n\u003e \u003e 在全局命名空间中，以下划线开头的标识符 或者 双下划线或以下划线开头后跟大写字母的标识符 是保留字。(除了 `operator \"\"_id` 字面量)\n\n## 个人学习笔记\n\n1. [C++无宏反射](./src/01-reflection/C++无宏反射.md)\n\n2. [inline作用(链接属性)](./src/02-link-property/inline关键字的作用.md)\n\n3. [C++11现代伪随机数生成](./src/03-random/现代伪随机数生成.md)\n\n4. [tbb-理解常用并行算法及其实现原理](./src/04-tbb/tbb-理解常用并行算法及其实现原理.md)\n\n5. [现代C++异常与`noexcept`表达式 (仅写了代码)](./src/05-exception/demo/01-noexcept/01_main.cpp)\n\n6. 长期需更新: \n    - std的剖析! (包含一些stl源码的实现)\n        - 01-constexpr `编译期操作`\n            - [编译期if](./src/06-std-analyse/demo/01-constexpr/01_if.cpp) (待更新C++11的基于模版的实现)\n            - [编译期for](./src/06-std-analyse/demo/01-constexpr/02_for.cpp) (递归/迭代的实现) (内含`std::make_index_constexpr系列`と`std::visit`の秘密)\n            - [玩具: 编译期toString](./src/06-std-analyse/demo/01-constexpr/03_toString.cpp)\n            - [玩具: 编译期求质数、质数筛(性能较差)](./src/06-std-analyse/demo/01-constexpr/04_primeNumber.cpp)\n        - 02-tuple\n            - [tuple](./src/06-std-analyse/demo/02-tuple/01_tuple.cpp) (包含`get(tuple)`、`tuple_size_v`、`make_tuple`、`tie`的实现, *~~引用多态真奇妙~~*)\n            - [trivially_copyable的tuple](./src/06-std-analyse/demo/02-tuple/02_tuple.cpp)\n        - 03-memory\n            - [unique_ptr](./src/06-std-analyse/demo/03-memory/01_UniquePtr.cpp)\n            - [shared_ptr](./src/06-std-analyse/demo/03-memory/02_SharedPtr.cpp)\n            - [全新的智能指针 三位一体](./ser/../src/06-std-analyse/demo/03-memory/03_new_memory.cpp)\n        - 04-sort\n            - [sort](./src/06-std-analyse/demo/04-sort/01_QuickSort.cpp) (一个支持迭代器、谓词的单边快排)\n            - [堆 + 堆排序](./src/06-std-analyse/demo/04-sort/02_HeapSort.cpp)\n        - 05-完美哈希\n            - [gpt给的, 完美哈希源码, 但是数量太多(50)个就不行了](src/06-std-analyse/demo/05-pmh/01_test_pmh_map.cpp)\n            - [复制粘贴其他的库来研究源码... 大部分都是编译期的](src/06-std-analyse/demo/05-pmh/02_cp_pmh_test.cpp)\n            - [编译期完美哈希思想的比较探测的哈希表, 即便元素数量有1233个(我随便找的), 也毫无压力](src/06-std-analyse/demo/05-pmh/03_test_pmh.cpp)\n            - [自己学习、注释、替换了第三方库的代码, 一个很小的可复现的code](src/06-std-analyse/demo/05-pmh/04_hx_pmh_map.cpp) (学习使用)\n        - 06-简单的哈希表的实现\n            - [unordered_map](./src/06-std-analyse/demo/06-hash-map/01_hash_map.cpp) (笔试题)\n        - 坑:\n            - std::is_convertible、 is_constructible 实现\n    - 实验 \u0026 学习\n        - 01-使用模版名称二阶段查找, 规避循环依赖问题 (虽然没有任何实际用处)\n            - [示例1](./ser/../src/06-std-analyse/test/01-tp-ForwardDeclaration/test_01.cpp)\n        - 02-CRTP\n            - [奇异递归模版 | 编译期多态](./src/06-std-analyse/test/02-crtp/01_crtp.cpp)\n        - 03-协程\n            - 暂时不提供示例(因为太乱了), 请见我的笔记: [协程速记](https://hengxin666.github.io/HXLoLi/docs/%E7%A8%8B%E5%BA%8F%E8%AF%AD%E8%A8%80/C++/%E7%8E%B0%E4%BB%A3C++/%E7%8E%B0%E4%BB%A3C++%E5%8D%8F%E7%A8%8B/%E5%8D%8F%E7%A8%8B%E9%80%9F%E8%AE%B0)\n        - 04-使用`constexpr`检测UB\n            - [`constexpr`检测UB | 常见UB大全](src/06-std-analyse/test/04-select-ub/01_ub_look.cpp)\n        - 05-深入学习虚析构的各种情况, 并且简单实现了shared_ptr智能指针的类型擦除\n            - [实验代码](src/06-std-analyse/test/05-vBaseClass/01-v_base_class.cpp)\n        - 06-学习全局运算符重载和自定义字面量\n            - [实验代码](src/06-std-analyse/test/06-my-op/01_my_op.cpp)\n        - 07-类型萃取\n            - [实验代码](src/06-std-analyse/test/07-TypeExtraction/01_type_extraction.cpp) (实现了 `is_void_v`/`remove_reference_t`/`is_same_v`)\n        - 08-Lambda\n            - [实验代码](src/06-std-analyse/test/08-Lambda/01_Lambda.cpp) (`auto\u0026\u0026` 做参数的 Lambda, 其实例化后, 类型也是不同的!(相当于延迟实例化了), 因此即便使用模板传参, 模板也一直模板...)\n        - 09-auto\n            - [对于auto返回值的讨论](src/06-std-analyse/test/09-auto/01_auto_return.cpp) 讨论了 `auto`、`auto\u0026`、`auto\u0026\u0026`、`decltype(auto)` 在各种常见情况下作为函数返回值时候的效果, 对比其不同.\n        - 10-临时对象声明周期探索实验\n            - [实验代码](src/06-std-analyse/test/10-tmp-obj-test/01_tmp_obj_test.cpp)\n            - [对返回 A\u0026\u0026 的实验探讨(ub无法展现)](src/06-std-analyse/test/10-tmp-obj-test/02_rxv_ub.cpp)\n            - [A\u0026\u0026 导致的悬挂引用(实例)](src/06-std-analyse/test/10-10-tmp-obj-test/03_xv_ub.cpp)\n        - 11-模板名字查找的实验\n            - [模板函数与类中的模板函数在重载时候的区别](src/06-std-analyse/test/11-template-find/01_test_g_or_class.cpp) (全局模板函数指定具体类型时候, 是当场实例化, 不会二阶段查找; 而类中本身就知道本类的所有声明, 因此可以找到后面的方法声明)\n            - [测试类的特化、偏特化、全特化在某些情况下是否有先后顺序问题](/src/06-std-analyse/test/11-template-find/02_partial_specialization.cpp) (有, 如果主模板被实例化, 而对应匹配的子模板没有实例化(声明顺序引起的), 就会导致原本期望匹配到特化上的, 却匹配到实例化上) (偏特化可以被二阶段查找, 但是如果指定了特化, 二阶段查找会被提前. 导致问题)\n            - [类中也有声明顺序的问题(类方法)](/src/06-std-analyse/test/11-template-find/03_auto_in_class.cpp)\n            - [模板匹配问题: 字符串数组 和 字符指针 隐式转换引发的二义性](src/06-std-analyse/test/11-template-find/04_wchar_t.cpp)\n        - 12-测试反射\n            - [编译期获取成员个数细节](/src/06-std-analyse/test/12-reflection/membersCount.cpp)\n            - [实现魔法枚举: 支持无宏的, 从枚举反射到字符串和字符串转枚举](/src/06-std-analyse/test/12-reflection/enum.cpp) \u0026 [在线跨平台测试(非最新代码)](https://godbolt.org/z/7o4eoWvf3), 目前实现是C++20的, 可以轻易下凡到 C++17 (C++17 以下的不行, 因为需要编译器提供的宏)\n            - [实现反射: 从类型反射到字符串(不包含模板)](/src/06-std-analyse/test/12-reflection/structName.cpp) (C++17) \u0026 [](https://godbolt.org/z/o1sMYs15j)\n        - 13-宏魔法学习 ~~(图灵完备的哦)~~\n            - [目录](src/06-std-analyse/test/13-MacroMagic/)\n        - 14-临时测试\n        - 15-如何在模板形参中使用字符串\n            - [NTTP+constexpr类实例](./src/06-std-analyse/test/15-str-NTTP/02_str_tp.cpp)\n        - 16-万能引用与完美转发\n            - [在指定参数的情况下的差异测试](./src/06-std-analyse/test/16-forward-tuple/01_forward_tuple.cpp)\n7. QT\n   - 01-QML [QML-目录](./src/07-qt/01-qml/) | 笔记: [现代C++QT-QML](https://hengxin666.github.io/HXLoLi/docs/%E7%A8%8B%E5%BA%8F%E8%AF%AD%E8%A8%80/C++/%E7%8E%B0%E4%BB%A3C++/%E7%8E%B0%E4%BB%A3C++QT/QML/Window%E4%BB%8B%E7%BB%8D%E4%B8%B6%E5%88%9D%E8%AF%86)\n\n8. OpenGL 图形学\n    - [00-测试程序](src/08-OpenGL/demo/00-example/01_test_opengl_is_install.cpp)\n    - [01-古代OpenGL-V2.0.0版本](src/08-OpenGL/demo/01-opengl-v200)\n        - [01-OpenGL基本API函数](src/08-OpenGL/demo/01-opengl-v200/01_opengl_func.cpp)\n        - [02-使用三角形绘制圆](src/08-OpenGL/demo/01-opengl-v200/02_opengl_yuan.cpp)\n        - [03-回家作业:使用OpenGL绘制OpenCV的Logo](src/08-OpenGL/demo/01-opengl-v200/03_opengl_hw01.cpp) \u0026 [带动画版本](src/08-OpenGL/demo/01-opengl-v200/04_opengl_hw01_prime.cpp)\n\n    - 03-三维模型的加载与相机控制\n        - 回顾三角形大作: 从固定的点数量到动态点数量\n            - [动态添加点: 鼠标点击三个点, 绘制三角形](03-src/08-OpenGL/demo/03-LoadingAndCameraControl/01_ClickAddPoint01.cpp)\n            - [鼠标点击: 修改点的位置, 发现没有关联变化](src/08-OpenGL/demo/03-LoadingAndCameraControl/01_ClickAddPoint02.cpp)\n            - [更新存储方式, 关联点变化](src/08-OpenGL/demo/03-LoadingAndCameraControl/01_ClickAddPoint03Ref.cpp)\n        - [OBJ模型简单解析器 + 手动计算法线](src/08-OpenGL/demo/03-LoadingAndCameraControl/02_ObjParser01.cpp)\n        - [OBJ模型简单解析器(支持解析法线和贴图)](src/08-OpenGL/demo/03-LoadingAndCameraControl/02_ObjParser02.cpp)\n        - [已经支持摄像机5种模式的平直/平滑双🐒渲染](src/08-OpenGL/demo/03-LoadingAndCameraControl/03_CameraState.cpp)\n        - [回家作业:使用OpenGL绘制OpenCV的Logo(3D带摄像机)](src/08-OpenGL/demo/03-LoadingAndCameraControl/04_hw.cpp)\n\n9. OS \u0026 平台API\n    \u003e 特别的, 下面为实验性质, 存在已知Bug, 并且未修复! 正确实现可以看 https://github.com/HengXin666/HXLibs\n    - 01-io_uring\n        - [基于协程的io_uring简易框架(目前是一个 **带超时** 的 `cin` 示例)](./src/09-os/demo/01-io_uring/02_io_uring_co.cpp)\n            - [WhenAny 协程](src/09-os/include/coroutine/awaiter/WhenAny.hpp)\n            - [UninitializedNonVoidVariant (擦除`void`类型的类型可重复的共用体)](src/09-os/include/tools/UninitializedNonVoidVariant.hpp) (也算的 `06` 的内容...) `// @todo 支持从可构造的进行构造, 而不是一定要类型一样 (std::string \u003c- const char *)`\n    - 02-thread\n        - [线程池](src/09-os/demo/02-thread/01_cpp_threadPool.cpp) 一个现代的线程池, 支持动态扩容和返回值 (基于C++ STL API)\n    - 03-iocp\n        - [基于协程的IOCP简易框架](src/09-os/demo/03-iocp/01_iocp_test.cpp) 支持超时机制!\n            - [TimerLoop](src/09-os/include/coroutine/loop/TimerLoop.hpp) 基于红黑树的协程定时器\n            - [RootTask](src/09-os/include/coroutine/task/RootTask.hpp) 可以被分离的协程, 独自成为根协程 (内部必需要有合法的 `co_await`, 否则无法挂起以继续原协程, 从而会导致分离的任务直接运行到结束)\n\n10. 赤石C++\n    - 01-实现一个 `\u003c-` 左指针运算符\n        - [知己知皮: `-\u003e` 运算符重载实验](01-src/10-cs-code/demo/01-left-ptr/01_right_ptr.cpp)\n        - [简单实现一个左指针运算符](src/10-cs-code/demo/01-left-ptr/02_left_ptr.cpp)\n        - [通过宏封装, 让左指针运算符可以注册并反射生成代码, 并且支持左指针调用函数](src/10-cs-code/demo/01-left-ptr/03_left_ptr_macro.cpp)\n        - [赤石 `\u003c一` 运算符, 支持指针类型(雾)](src/10-cs-code/demo/01-left-ptr/04_left_pptr.cpp)\n    - 02-解决循环依赖无法使用引用的问题 (通过模板二阶段名称查找)\n        - [01-一个循环依赖的实例](./src/10-cs-code/demo/02-CircularDependency/01_what_is.cpp)\n        - [02-加上模板变为二阶段名称查找](./src/10-cs-code/demo/02-CircularDependency/02_to_template.cpp)\n        - [03-上宏隐藏细节](./src/10-cs-code/demo/02-CircularDependency/03_macro.cpp)\n    - 03-[赤石QML] Wayland 窗口系统, 如何实现记忆窗口位置\n        - [FullScreenWindow.qml](https://github.com/HengXin666/HX-Music/blob/main/HX-Music-Client/resources/qml/window/FullScreenWindow.qml) (外部链接, 可能会失效)\n\n11. 第三方库\n    - 01-gtest: https://github.com/google/googletest\n        - [简单使用GTest, 以及测试EBO](src/11-libsTest/gtest/01_gtest.cpp)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhengxin666%2Fhxtest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhengxin666%2Fhxtest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhengxin666%2Fhxtest/lists"}