# NahidaProject **Repository Path**: nahida-project-develop/NahidaProject ## Basic Information - **Project Name**: NahidaProject - **Description**: C++ 常用类库,让 C++ 开发不再难受 - **Primary Language**: C++ - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/nahida-project-develop/NahidaProject - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2025-07-17 - **Last Updated**: 2025-10-19 ## Categories & Tags **Categories**: scripting-language **Tags**: Cpp, Library ## README # NahidaProject [![star](https://gitee.com/hezonglun/nahida-project/badge/star.svg?theme=dark)](https://gitee.com/hezonglun/nahida-project/stargazers) [![fork](https://gitee.com/hezonglun/nahida-project/badge/fork.svg?theme=dark)](https://gitee.com/hezonglun/nahida-project/members) ## 简介 NahidaProject 是 C++ 常用代码的整理归纳,可以减少开发时间和开发难度。 虽然目前我们不支持 Linux。 但在未来,我们会做到跨平台运行。 NahidaProject 十分小巧,却包含了常用的模块: |模块名称 | 模块用途 | |---------------------------|-----------------------------| |NahidaProject.Console |控制台模块 | |NahidaProject.Database |数据库模块 | |NahidaProject.Generic |通用模块 | |NahidaProject.HashAlgorithm|散列计算模块 | |NahidaProject.Mathmatics |数学与算法模块 | |NahidaProject.Other |其他模块 | |NahidaProject.Serialization|序列化模块 | |NahidaProject.Thread |与线程,流程控制有关的模块 | |NahidaProject.UnitTest |微型单元、基准、模拟测试模块 | ### 代码的来源 * 开发者口口相传 * 自己编写整理 ## 参考文档 - [开发文档](https://gitee.com/hezonglun/nahida-project/tree/master/Documents) ## 值得介绍的模块 ### 布隆过滤器类 [BloomFilter.h](https://gitee.com/hezonglun/nahida-project/blob/master/NahidaProject.Generic/Sources/BloomFilter.h) 提供布隆过滤器的实现。 ```cpp #include "BloomFilter.h" #include int main(int argc, char** argv) { NahidaProject::BloomFilter<100> bf; bf.Set("Object A"); bf.Set("Object B"); bf.Set("Object C"); std::cout << bf.Check("Object A") << std::endl; std::cout << bf.Check("Object B") << std::endl; std::cout << bf.Check("Object C") << std::endl; std::cout << bf.Check("Object D") << std::endl; std::cout << bf.EstimateElementCount() << std::endl; std::cout << "Used bits: " << bf.GetUsedBits() << std::endl; std::cout << "Load factor: " << bf.LoadFactor() << std::endl; std::cout << "False positive rate: " << bf.EstimateFalsePositiveRate(3) << std::endl; bf.Clear(); std::cout << "After clear, used bits: " << bf.GetUsedBits() << std::endl; } ``` ### 日志类 **[Logger.h](https://gitee.com/hezonglun/nahida-project/blob/master/NahidaProject.Generic/Sources/Logger.h)** 是一个异步执行的日志组件。 可以快速提供日志支持。 ```cpp #include "Logger.h" int main(int argc, char** argv) { NahidaProject::Logger::getInstance()->Open("test.log"); NahidaProject::Logger::getInstance()->SetMax(1024); Debug("Hello NahidaProject"); Information("Hello NahidaProject"); Warning("Hello %s", "NahidaProject"); Error("Hello NahidaProject"); return 0; } ``` 日志系统提供了 `FATAL` 宏,FATAL 执行后,程序停止运行。 ```cpp int main(int argc, char** argv) { NahidaProject::Logger::getInstance()->Open("test.log"); NahidaProject::Logger::getInstance()->SetMax(1024); FATAL("Hello NahidaProject"); // 停止运行,退出代码 -1 return 0; } ``` ### 单元测试类 **[NahidaUnitTest.h](https://gitee.com/hezonglun/nahida-project/blob/master/NahidaProject.UnitTest/Sources/NahidaUnitTest.h)** 是一个简单的单元测试框架,NahidaProject 中的所有组件用它写单元测试代码。 ```cpp #include "NahidaTest.h" Test(TestPoint1) { AssertEqual(1 + 1, 2); // 测试通过 } Test(TestPoint2) { AssertEqual(1 - 1, 10086); // 测试失败 } int main(int argc, char** argv) { RunAllTestCase(); return 0; } ``` 每个模块的 Tests 目录下面是对应模块的单元测试代码,合并你的分支前务必运行,直到所有测试全部通过。 ## 目录结构说明 - NahidaProject.XXX NahidaProject 各个模块的源代码,编译会生成: 只有符号链接的 NahidaProject.XXX.lib。 包含函数定义的 NahidaProject.XXX.IMPLEMENT.lib。 包含函数定义的 NahidaProject.XXX.dll。 用于测试的 NahidaProject.XXXTest.exe。 - [Documents](https://gitee.com/hezonglun/nahida-project/tree/master/Documents) NahidaProject 的使用文档。 ## 编译与安装 NahidaProject 中的代码,可以直接引入使用。但是我们更建议编译安装。 ### 工具链要求 编译 NahidaProject 需要工具链支持 C++ 20, 推荐的物料如下所述: - Microsoft Windows: [Windows 10+](https://www.microsoft.com/zh-cn/download/windows) - Microsoft Visual Studio Community : [Microsoft Visual Studio Community 2022+](https://visualstudio.microsoft.com/zh-hans/) 选择「使用 C++ 的桌面开发」安装项及其下面的「用于 Windows 的 C++ CMake 工具」 - Kitware CMake : [3.31.6+](https://cmake.org/download/) 建议使用 Microsoft Visual Studio Community 自带的 CMake。 提示:在 Windows 上编译 NahidaProject 没有标准答案,可以多尝试几种工具链。 ### 编译步骤 - 使用 Microsoft Visual Studio Community 直接打开文件夹,等待初始化 CMake 项目。 - 对每个模块生成 NahidaProject.XXXTests.exe 以测试库代码和物料配置没有问题。 - 右键项目根目录,选择切换到 CMake 目标视图,生成所有编译产物。 - 复制所有的编译产物到你喜欢的路径下使用。 请不要使用 CMake 生成出的 Microsoft Visual Studio 项目文件来构建这个库,会导致编码问题。 编译过程中可能会有一些警告。如果没有什么大问题,无视即可。 ## 添砖加瓦 ### 问题反馈 问题反馈时,请提供: * 你计算机操作系统和编译工具链的版本号。 * 你为了解决这个问题,作出了哪些努力。 ### 操作流程 这也许是你可以参与的第一个有用的 C++ 项目。 欢迎对 GitHub、Gitee 协作不熟悉的人和任何 C++ 初学者以此为契机学习参与贡献。 重在学习与参与,这是这个项目的主要目标。 你可以按照以下的步骤操作: - 分支本仓库。 - 此时本仓库当前状态的一个副本会在你的名下,先克隆到你的计算机上。 - 编写属于你的模块或类。 - 用库自带的单元测试模块写测试,全部通过后提交到你克隆下来的仓库的 `develop` 分支。 - 推送到你名下的本仓库分支。 - 新建 Pull Request,请求合并。 开发小锦囊:最好的样本是 [CowSay.cpp](https://gitee.com/hezonglun/nahida-project/blob/master/NahidaProject.Other/Sources/CowSay.cpp) 和 [CowSay.h](https://gitee.com/hezonglun/nahida-project/blob/master/NahidaProject.Other/Sources/CowSay.h) ### 贡献规定 此项目十分自由,但在开始你的贡献前,有一些规定要遵守: - 类命名与函数命名与文件命名:帕斯卡命名法: `class TestClass { }; void TestFunction() { } TestClass.cpp TestClass.h`。 - 可以不写注释,但是一定要有文档。 - 按照模块用途做好分类,并放置在对应的子模块中。 - 如果你的类对第三方库进行了封装,请将其放置在 `NahidaProject-ThirdParty` 子项目下。 - 尽情发挥你的创造力。 别忘了目录布局 ``` ├─NahidaProject.XXX │ ├─Sources ---> 放置源代码 │ └─Tests ---> 放置单元测试代码 ``` 当然也不要忘了在 [NahidaProject.cpp](https://gitee.com/hezonglun/nahida-project/blob/master/NahidaProject.Generic/Sources/NahidaProject.cpp) 中留下你的 Gitee ID。 ## 开放源代码许可与说明 全项目使用了 Mulan PSL v2。 ## 开放源代码状态 [![HeZongLun/NahidaProject](https://gitee.com/hezonglun/nahida-project/widgets/widget_card.svg?colors=eae9d7,2e2f29,272822,484a45,eae9d7,747571)](https://gitee.com/hezonglun/nahida-project)