[{"data":1,"prerenderedAt":408},["ShallowReactive",2],{"page-\u002Fcpp\u002F优雅和正确的使用cpp的注释":3},{"id":4,"title":5,"body":6,"description":174,"extension":402,"meta":403,"navigation":214,"path":404,"seo":405,"stem":406,"__hash__":407},"content\u002Fcpp\u002F优雅和正确的使用Cpp的注释.md","优雅和正确的使用Cpp的注释",{"type":7,"value":8,"toc":398},"minimark",[9,13,17,165,168,333,336,339,346,349,355,370,376,379,382,388,394],[10,11,12],"h2",{"id":12},"前言",[14,15,16],"p",{},"这个文档我会讲解如何使用c++的注释以及使用doxygen来生成文档使用，doxygen支持多种风格，但是在现代c++中，我们推荐使用javadoc或者三斜杠。如果我们需要让生成的文档像专业库opencv或者QT一样清晰，那么我们就需要使用使用下面的标签：",[18,19,20,43],"table",{},[21,22,23],"thead",{},[24,25,26,33,38],"tr",{},[27,28,29],"th",{},[30,31,32],"strong",{},"标签",[27,34,35],{},[30,36,37],{},"含义",[27,39,40],{},[30,41,42],{},"用法示例",[44,45,46,65,82,99,116,133,150],"tbody",{},[24,47,48,57,60],{},[49,50,51],"td",{},[30,52,53],{},[54,55,56],"code",{},"@brief",[49,58,59],{},"简要说明",[49,61,62],{},[54,63,64],{},"@brief 初始化相机驱动",[24,66,67,74,77],{},[49,68,69],{},[30,70,71],{},[54,72,73],{},"@param",[49,75,76],{},"参数说明",[49,78,79],{},[54,80,81],{},"@param width 图像宽度（像素）",[24,83,84,91,94],{},[49,85,86],{},[30,87,88],{},[54,89,90],{},"@return",[49,92,93],{},"返回值说明",[49,95,96],{},[54,97,98],{},"@return 成功返回 0，失败返回错误码",[24,100,101,108,111],{},[49,102,103],{},[30,104,105],{},[54,106,107],{},"@note",[49,109,110],{},"特别注意",[49,112,113],{},[54,114,115],{},"@note 该函数是非线程安全的",[24,117,118,125,128],{},[49,119,120],{},[30,121,122],{},[54,123,124],{},"@see",[49,126,127],{},"参考引用",[49,129,130],{},[54,131,132],{},"@see StopCamera()",[24,134,135,142,145],{},[49,136,137],{},[30,138,139],{},[54,140,141],{},"@throws",[49,143,144],{},"异常说明",[49,146,147],{},[54,148,149],{},"@throws std::runtime_error 如果硬件未连接",[24,151,152,159,162],{},[49,153,154],{},[30,155,156],{},[54,157,158],{},"@file",[49,160,161],{},"文件声明",[49,163,164],{},"放在文件开头，用于生成文件列表文档",[14,166,167],{},"比如说我们需要编写一个日志类：",[169,170,175],"pre",{"className":171,"code":172,"language":173,"meta":174,"style":174},"language-cpp shiki shiki-themes github-light github-dark","\u002F**\n * @file Logger.hpp\n * @author YourName\n * @brief 高性能日志系统头文件\n *\u002F\n\n#pragma once\n#include \u003Cstring>\n\n\u002F**\n * @class Logger\n * @brief 处理系统日志输出的单例类\n * \n * 该类通过 ANSI 转义序列实现控制台彩色输出。\n *\u002F\nclass Logger {\npublic:\n    \u002F**\n     * @brief 打印一条格式化日志\n     * \n     * @param level 日志等级 @see LogLevel\n     * @param msg   要打印的消息内容内容\n     * @attention 确保已调用 SetConsoleOutputCP(CP_UTF8)\n     *\u002F\n    static void Log(LogLevel level, const std::string& msg) noexcept;\n};\n","cpp","",[54,176,177,185,191,197,203,209,216,222,228,233,238,244,250,256,262,267,273,279,285,291,297,303,309,315,321,327],{"__ignoreMap":174},[178,179,182],"span",{"class":180,"line":181},"line",1,[178,183,184],{},"\u002F**\n",[178,186,188],{"class":180,"line":187},2,[178,189,190],{}," * @file Logger.hpp\n",[178,192,194],{"class":180,"line":193},3,[178,195,196],{}," * @author YourName\n",[178,198,200],{"class":180,"line":199},4,[178,201,202],{}," * @brief 高性能日志系统头文件\n",[178,204,206],{"class":180,"line":205},5,[178,207,208],{}," *\u002F\n",[178,210,212],{"class":180,"line":211},6,[178,213,215],{"emptyLinePlaceholder":214},true,"\n",[178,217,219],{"class":180,"line":218},7,[178,220,221],{},"#pragma once\n",[178,223,225],{"class":180,"line":224},8,[178,226,227],{},"#include \u003Cstring>\n",[178,229,231],{"class":180,"line":230},9,[178,232,215],{"emptyLinePlaceholder":214},[178,234,236],{"class":180,"line":235},10,[178,237,184],{},[178,239,241],{"class":180,"line":240},11,[178,242,243],{}," * @class Logger\n",[178,245,247],{"class":180,"line":246},12,[178,248,249],{}," * @brief 处理系统日志输出的单例类\n",[178,251,253],{"class":180,"line":252},13,[178,254,255],{}," * \n",[178,257,259],{"class":180,"line":258},14,[178,260,261],{}," * 该类通过 ANSI 转义序列实现控制台彩色输出。\n",[178,263,265],{"class":180,"line":264},15,[178,266,208],{},[178,268,270],{"class":180,"line":269},16,[178,271,272],{},"class Logger {\n",[178,274,276],{"class":180,"line":275},17,[178,277,278],{},"public:\n",[178,280,282],{"class":180,"line":281},18,[178,283,284],{},"    \u002F**\n",[178,286,288],{"class":180,"line":287},19,[178,289,290],{},"     * @brief 打印一条格式化日志\n",[178,292,294],{"class":180,"line":293},20,[178,295,296],{},"     * \n",[178,298,300],{"class":180,"line":299},21,[178,301,302],{},"     * @param level 日志等级 @see LogLevel\n",[178,304,306],{"class":180,"line":305},22,[178,307,308],{},"     * @param msg   要打印的消息内容内容\n",[178,310,312],{"class":180,"line":311},23,[178,313,314],{},"     * @attention 确保已调用 SetConsoleOutputCP(CP_UTF8)\n",[178,316,318],{"class":180,"line":317},24,[178,319,320],{},"     *\u002F\n",[178,322,324],{"class":180,"line":323},25,[178,325,326],{},"    static void Log(LogLevel level, const std::string& msg) noexcept;\n",[178,328,330],{"class":180,"line":329},26,[178,331,332],{},"};\n",[10,334,335],{"id":335},"生成文档",[14,337,338],{},"生成文档的方法也比较简单，我们可以选择doxywizard去导出：",[14,340,341],{},[342,343],"img",{"alt":344,"src":345},"image-20260501224029730",".\u002Fassets\u002Fimage-20260501224029730.png",[14,347,348],{},"这一页的配置比较简单，看一下就知道怎么设置，重要的是后面的设置：",[14,350,351],{},[342,352],{"alt":353,"src":354},"image-20260501225546263",".\u002Fassets\u002Fimage-20260501225546263.png",[14,356,357,358,361,362,365,366,369],{},"目前选的是 ",[30,359,360],{},"Documented entities only","（仅提取已注释的实体），如果我们的代码还灭有大规模写完",[54,363,364],{},"\u002F ... *\u002F"," 这种格式的注释，请改选 ",[30,367,368],{},"All Entities","，选了 All Entities 后，即便你还没写注释，Doxygen 也会把类结构、函数声明都列出来，方便你查看项目的整体架构。",[14,371,372],{},[342,373],{"alt":374,"src":375},"image-20260501225718307",".\u002Fassets\u002Fimage-20260501225718307.png",[14,377,378],{},"output可以选择导出的文档的格式，如果我们想在浏览器里看文档的话可以去掉LaTex，latex用来生成的是pdf打印版，生成比较慢，而且会有很多中间文件。",[14,380,381],{},"Diagrams是标签页，这是 Doxygen 自带的简易绘图，只能画简单的类继承关系，样子比较复古。效果如下，我们可以直接在网页中看到：",[14,383,384],{},[342,385],{"alt":386,"src":387},"image-20260501230109312",".\u002Fassets\u002Fimage-20260501230109312.png",[14,389,390],{},[342,391],{"alt":392,"src":393},"image-20260501230131524",".\u002Fassets\u002Fimage-20260501230131524.png",[395,396,397],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":174,"searchDepth":187,"depth":187,"links":399},[400,401],{"id":12,"depth":187,"text":12},{"id":335,"depth":187,"text":335},"md",{},"\u002Fcpp\u002F优雅和正确的使用cpp的注释",{"description":174},"cpp\u002F优雅和正确的使用Cpp的注释","M6-03LjhpK0cT3OAr8yOEjagbP5rjjj7_OGrgJlp70Q",1791042464410]