UID395673性别保密经验 EP铁粒 粒回帖0主题精华在线时间 小时注册时间2022-5-2最后登录1970-1-1
| 本帖最后由 开心的阿诺 于 2024-3-10 10:33 编辑
屑项目,掏出来让大佬们见笑了 xd:https://github.com/HappyArno/LightNBT
很早之前就曾因机缘巧合了解过NBT的文件格式,于是就突发奇想,开始用C++写一个自己的NBT库,也算是学了不少东西
这个项目从上学期就开始写了,但由于住宿在学校,只有周末回家才能摸到电脑,再加上学习压力,所以慢悠悠地写到寒假才正式竣工
这两个周末又把SNBT的读取功能完善了,便乘这个机会来水一帖(什么?你说SNBT的输出呢?目前这部分代码还有很大的改进空间,于是就当做示例力 qwq)
这个库的功能也很简单,就是解析NBT/SNBT然后构造树状的NBT结构,并提供了一些函数方便访问数据,具体看项目README
关于NBT树状数据的访问,我受 JS 的 optional chaining (?.) 很大的启发,在实现了常规返回引用抛出异常的 get 函数以外,还另外实现了一系列返回指针的 get_if 函数,让一整个函数链上出现 nullptr 时仍可以按预期运行
另外C++20新加入的概念(concept)实在是太香啦~ 比之前的 type trait 单纯靠 SFINAE 好多啦~ 另外还有一堆新东西(协程、模块、三路比较等等),赶快成为编译器的默认标准啊 awa
在写代码的时候经受的最惨痛的教训莫过于读取NBT文件的时候一定!一定!一定!要记得用二进制格式打开,当时害得我调试了一天,又是gdb又是自定义io流,整得整个人都不好了,最后才发现是忘记标一个小小的ios::binary标识 qwq
我的代码肯定会有一些问题和漏洞,还有不优雅的地方,希望大佬们能够赐教~
预计将来肯定要做的就是支持.mca文件还有基岩版特有的带8比特文件头的level.dat,另外还希望能找到一个通用的NBT流式处理框架,虽然不太现实 xd
|
|