很多人第一次学模块。
会先背语法。
然后一上手就懵。
因为模块真正难的。
是“哪些该给别人看”。
当年:头文件把边界搞糊了
头文件时代。
你写着写着。
会把实现也写进头文件。
因为模板要。
因为 inline 要。
因为省事。
最后边界消失。
接口和实现混在一起。
三种常见单元
module interface unit
它负责声明模块。
以及导出接口。
export module net;
export int connect();
这里的 export module。
就是“这个文件定义了模块的接口”。
module implementation unit
它负责实现。
不负责导出。
module net;
int connect() {
return 0;
}
这里的 module net;。
说明它属于 net 模块。
但它不是接口。
export 的粒度:你可以导出声明,也可以导出定义
你可以只 export 声明。
export int connect();
也可以 export 定义。
export int connect() { return 0; }
你怎么选。
取决于你想不想把实现暴露给使用方的编译。
你刚学 C++ 会卡:export 不是“可见性修饰符”那么简单
它更像合同。
你 export 出去。
就意味着你要长期维护。
你不 export。
就意味着你有自由改。
关键结论
模块划分的核心。
不是文件怎么命名。
是你 export 了什么。
小结
先把 interface 写薄。
实现写厚。
你就会少很多“改一行重编全世界”的痛。