@@ -22,19 +22,123 @@ int main() {
2222
2323## 目录
2424
25- - 0.[ 使用` import xxx ` 替代` #include <xxx> ` ] ( ./README.md#0使用import-xxx替代include-xxx )
26- - 1.[ 模块文件结构] ( ./README.md#1模块文件结构 )
27- - 2.[ 使用模块` .cppm ` 替代头文件` .h ` 、` .hpp ` ] ( ./README.md#2使用模块cppm替代头文件hhpp )
28- - 3.[ 模块实现与接口导出分离] ( ./README.md#3模块实现与接口导出分离 )
29- - 4.[ 模块及模块分区命名规范] ( ./README.md#4模块及模块分区命名规范 )
30- - 5.[ 多文件模块和目录] ( ./README.md#5多文件模块和目录 )
31- - 6.[ 可导出模块分区和内部模块分区] ( ./README.md#6可导出模块分区和内部模块分区 )
32- - 7.[ 模块化与向前兼容] ( ./README.md#7模块化与向前兼容 )
33- - 8.[ 其他] ( ./README.md#8其他 )
34- - 8.1 尽可能的少使用宏
35- - 8.2 导出模板接口时注意全局静态成员
36-
37- ## 正文
25+ - 一、` 标识符 ` 命名风格
26+ - 1.0 [ 类型名 - 大驼峰] ( )
27+ - 1.1 [ 对象/数据成员 - 小驼峰] ( )
28+ - 1.2 [ 函数 - 下划线(snake_case)] ( )
29+ - 1.3 [ 私有表示 - ` _ ` 后缀] ( )
30+ - 二、模块化
31+ - 2.0 [ 使用` import xxx ` 替代` #include <xxx> ` ] ( ./README.md#0使用import-xxx替代include-xxx )
32+ - 2.1 [ 模块文件结构] ( ./README.md#1模块文件结构 )
33+ - 2.2 [ 使用模块` .cppm ` 替代头文件` .h ` 、` .hpp ` ] ( ./README.md#2使用模块cppm替代头文件hhpp )
34+ - 2.3 [ 模块实现与接口导出分离] ( ./README.md#3模块实现与接口导出分离 )
35+ - 2.4 [ 模块及模块分区命名规范] ( ./README.md#4模块及模块分区命名规范 )
36+ - 2.5 [ 多文件模块和目录] ( ./README.md#5多文件模块和目录 )
37+ - 2.6 [ 可导出模块分区和内部模块分区] ( ./README.md#6可导出模块分区和内部模块分区 )
38+ - 2.7 [ 模块化与向前兼容] ( ./README.md#7模块化与向前兼容 )
39+ - 2.8 [ 其他] ( ./README.md#8其他 )
40+ - 2.8.1 尽可能的少使用宏
41+ - 2.8.2 导出模板接口时注意全局静态成员
42+
43+ ## 一、` 标识符 ` 命名风格
44+
45+ > 核心思想通过` 标识符 ` 风格设计, 能快速识别 - 类型、函数、数据以及封装性
46+
47+ ``` cpp
48+ namespace mcpplibs { // 1.命名空间全小写
49+
50+ class StyleRef { // 2.类型名大驼峰
51+
52+ private:
53+ int data_ ; // 3.私有数据成员 xxx_
54+ std::string fileName_ ; // std::
55+
56+ public: // 4. 构造函数 / bigfive 单独放一个public区域
57+
58+ StyleRef() { }
59+ StyleRef (const StyleRef &obj) { /* ... * / }
60+ StyleRef(StyleRef &&) { /* ... * / }
61+ StyleRef & operator=(const StyleRef &) { /* ... * / }
62+ StyleRef & operator=(StyleRef &&) { /* ... * / }
63+ ~ StyleRef() { /* ... * / }
64+
65+ public: // 5.公有函数区域
66+
67+ // 函数名 下划线分割 / snake_style
68+ void load_config_file(std::string fileName /* 7.小驼峰 */) {
69+ // 成员函数如无特殊要求接口和实现不分离
70+ parse_(config);
71+ }
72+
73+ private:
74+
75+ // 6.公有函数区域, 被私有成员函数以 `_` 结尾
76+ void parse_(std::string config) {
77+
78+ }
79+
80+ };
81+
82+ }
83+ ```
84+
85+ ### 1.0 类型名 - 大驼峰
86+
87+ > 单词首字母都大写, 单词之间不加下划线.
88+
89+ - 例: `StyleRef, HttpServer, JsonParser`
90+
91+ ```cpp
92+ struct StyleRef {
93+ using FileNameType = std::string;
94+ };
95+ ```
96+
97+ ### 1.1 对象/数据成员 - 小驼峰
98+
99+ > 一个单词首字母小写, 后续单词首字母大写, 不加下划线
100+
101+ - 例: ` fileName, maxRetryCount, configText `
102+
103+ ``` cpp
104+ struct StyleRef {
105+ std::string fileName;
106+ };
107+ ```
108+
109+ ### 1.2 函数 - 下划线(snake_case)
110+
111+ > 全小写(通常), 单词用下划线连接
112+
113+ - 例: `load_config_file, parse_, max_retry_count`
114+
115+ ```cpp
116+ class StyleRef {
117+ public:
118+ void load_config_file(std::string fileName) {
119+
120+ }
121+ };
122+ ```
123+
124+ ### 1.3 私有表示 - ` _ ` 后缀
125+
126+ > 在标识符后加上`_`表示是对外部不可访问/私有的数据, 即可以是数据成员也可以是函数
127+
128+ - 例: `fileName_, load_config_file_`
129+
130+ ```cpp
131+ class StyleRef {
132+ private:
133+ std::string fileName_ ;
134+
135+ void parse_(std::string config) {
136+
137+ }
138+ };
139+ ```
140+
141+ ## 二、模块化
38142
39143### 0.使用` import xxx ` 替代` #include <xxx> `
40144
0 commit comments