2601C++,模块基础

模块的应用

模块机制的应用一般有以下几部分:
模块单元接口定义具体实现

模块的接口负责定义相关使用约定和条件;实现提供具体的应用逻辑.接口抽象清除对具体应用的依赖,这也符合设计原则上的依赖抽象,方便扩展和测试.

利用导出定义规则限制

模块最主要功能就是要和其它的模块协作,所以可导出来确定相关导出的内容,用来向其它模块或应用提供接口,控制内外的边界.
每个模块只有能一个默认导出,另外,导出的应用有着具体的语义规则:模块静态绑定的且要保持全局引用一致性;

不可导出模块域内的临时变量;支持重导出(reexport),目的是聚集接口.

说明,所谓重导出,就是在导出模块中可导出其它模块.类似下面:

cpp 复制代码
//已存在`A,B`两个模块,在`C`模块中导出它们
export module C;
export module A;
export module B;
//有选择的导出即分块导出

export import:A1 from A;
//设置A模块中导出了`A1`模块
export void test();
//C模块中`自定义`的导出接口

文件命名和模块管理

为了保持可维护性和易用,建议使用一些常见的风格管理,如Google,Linux等等,其后缀推荐使用.ccpm或.ixx.

没有强制,只有适用.如,以点分隔相关模块就是一个非常容易为大家理解和接受的方法即类似"export math.core.matrix".

同样,模块管理中,模块的文件最好与实际的定义一一保持对应(一一映射).该如果有Go神算等开发经验的就非常好理解了.

全局模块片段的应用

全局模块片段c++模块用来兼容传统头文件的一个机制,它不属于模块相关说明.一般在接口单元"module;"声明后到模块定义"export module myself;前的部分.如下例:

cpp 复制代码
module;
#include <vector>
export module demo;

全局模块片段还可用来隔绝预处理器的定义,处理宏定义等.

私有模块片段的应用

有全局模块片段就会有私有的.在C++中一般是如下定义:

cpp 复制代码
module;
#include <iostream>
export module demo;
module:private;
void testPrivate(){std::cout<<"private module test!"<<std::endl;}

注意,必须在公有及导出模块模块后定义私有模块,否则会报私有编译错误.如:

例程

如上,下面给出示例:

cpp 复制代码
//`exportdemo.cppm`
module;
#include <vector>
#include <iostream>
export module demo;
import std;
namespace demo{
export int Add(int,int);
export class exportDemo
{
public:
    exportDemo();
public:
    void display();
    std::vector<int> vec_;
};
}
module:private;
void testPrivate(){std::cout<<"private module test!"<<std::endl;}
//`exportdemo.cpp`
module demo;
import std;
namespace demo{
int Add(int a,int b){return a+b;}
exportDemo::exportDemo() {}
void exportDemo::display(){
    vec_.reserve(10);
    testPrivate();
    std::cout<<"this is demo module!"<<std::endl;
}
}
相关推荐
Yu_Lijing几秒前
网络复习篇——网络基础(一)
网络·c++·笔记
Bella的成长园地2 分钟前
为什么c++中的条件变量的 wait() 函数需要配合while 循环或谓词?
c++·面试
charlee443 分钟前
为什么现代 C++ 库都用 PIMPL?一场关于封装、依赖与安全的演进
c++·智能指针·raii·pimpl·编译防火墙·封装设计
MSTcheng.14 分钟前
CANN ops-math算子的跨平台适配与硬件抽象层设计
c++·mfc
code monkey.15 分钟前
【Linux之旅】Linux 进程间通信(IPC)全解析:从管道到共享内存,吃透进程协作核心
linux·c++·ipc
薛定谔的猫喵喵17 分钟前
基于C++ Qt的唐代诗歌查询系统设计与实现
c++·qt·sqlite
阿昭L21 分钟前
C++异常处理机制反汇编(三):32位下的异常结构分析
c++·windows·逆向工程
Cinema KI24 分钟前
C++11(下) 入门三部曲终章(基础篇):夯实语法,解锁基础编程能力
开发语言·c++
燃于AC之乐28 分钟前
深入解剖STL List:从源码剖析到相关接口实现
c++·stl·list·源码剖析·底层实现
汉克老师33 分钟前
GESP2025年6月认证C++二级( 第一部分选择题(9-15))
c++·循环结构·求余·gesp二级·gesp2级·整除、