用 c 来封装一个模块,可以参考下面这个连接中的做法。
http://paul.rutgers.edu/~csgates/CS416/proj2/index.html
这里的做法可以说已经到了一种极限,如果把这个 threadpool 编译为一个动态连接库的话,那么对于客户程序来说,即使在编译时使用 A 实现,在运行时改成用 B 实现也完全没问题。只要 B 实现生成的库名和 A 一致。这里关键的一点就是 threadpool 的定义,居然是 typedef 为 void *。客户程序得到的是一个 void * 指针,这样在客户程序中就完全不涉及具体的实现了。也就是常说的“对客户程序透明”(明明是 void * ,什么都没表现出来,为什么当初会使用“透明”这个词来形容,有点怪,呵呵)。这种效果已经和 cpp 中的纯虚基类的封装性差不多了,只是没有虚基类的多态功能。
这是 threadpool 的定义:
typedef void *threadpool;
threadpool create_threadpool(int num_threads_in_pool);
void dispatch(threadpool from_me, dispatch_fn dispatch_to_here,
void *arg);
void destroy_threadpool(threadpool destroyme);
如果用 cpp 想实现类似的功能,那么就是用上面提到的纯虚基类。如果只是考虑对客户程序的封装性,那么像 c 这种全局函数可能比纯虚基类更方便。因为给纯虚基类添加一个函数可能回影响客户程序,而增加一个全局 c 函数对客户程序来说,一般不会有影响。
从长期维护的角度来说,使用 c 来做这种模块的封装还是很有好处的,甚至比 cpp 的方式更好。
分享到:
相关推荐
"C:\Users\Administrator\Desktop\VBA功能大全\VBA完美封装模块\封装模块exe(生成程序方法).rar" "C:\Users\Administrator\Desktop\VBA功能大全\VBA完美封装模块\VB破解打开密码" "C:\Users\Administrator\Desktop...
在本文中,我们将详细介绍 MATLAB 如何封装模块,包括 S 函数的编写和模块封装。 S 函数是模块的核心,是完成功能实现的关键。S 函数的编写可以使用多种程序语言,其中 M 语言是最常用的,同时也是最简单的。在运用...
在PSIM中,可以通过使用C模块来调用C语言函数,实现更加复杂的模拟和计算。 本文将介绍如何在PSIM中使用C语言模块计算有效值函数。 需求 我们需要在PSIM中计算一个电压或电流的有效值,以便进行后续分析和控制。 ...
“车载诊断系统(On-Board Diagnostic)” 数据采集,采用C++编写技术模块 LibEvent封装、log模块、线程CThread的封装、锁模块 “车载诊断系统(On-Board Diagnostic)” 数据采集,采用C++编写技术模块 LibEvent...
IGBT模块封装是将多个IGBT集成封装在一起,以提高IGBT模块的使用寿命和可靠性,体积更小、效率更高、可靠性更高是市场对IGBT模块的需求趋势,这就有待于IGBT模块封装技术的开发和运用。目前流行的IGBT模块封装形式有...
C++封装Socket时,通常会使用面向对象的方法,定义类来封装这些函数,使得代码更加模块化,易于理解和维护。例如,可以创建一个`Socket`基类,然后分别有`ServerSocket`和`ClientSocket`派生类。基类中封装基本的...
一个C/C++日志记录模块,它是对开源log4c进行的封装和修正的基础上,将所有的代码都集成到一个.h头文件中。带来的革命性突破是日志模块的使用是那么的方便和简单:只要使用一个.h头文件即可无缝的将日志模块嵌入到你...
在MiniSTM32平台上使用这个封装库时,首先需要正确连接模块的UART接口,然后在代码中初始化串口通信并加载库文件。之后,可以通过调用库函数发送AT指令,处理返回的数据,实现GSM/GPRS功能。由于MiniSTM32是一个基于...
良好的模块设计应确保每个模块尽可能地封装其内部状态,只暴露必要的接口供外部使用。 3. **依赖关系管理**: - 在多模块系统中,应清晰地定义模块间的依赖关系,避免循环依赖。可以利用头文件的正确包含顺序和...
`用C语言实现Simulink自定义模块.docx`文档应该包含了详细步骤、注意事项和示例代码解析,帮助读者理解并实践自定义Simulink模块的过程。通过阅读这份文档,可以加深对C语言在Simulink中的应用的理解。 总结,利用...
本文将详细介绍如何在SIMULINK中使用S-函数创建和封装用户自定义模块。 #### 二、S-函数简介 S-函数(System Function)是SIMULINK提供的一种特殊类型的模块,允许用户自定义模块的行为。S-函数可以使用MATLAB代码...
1. **驱动程序代码**:这些是用C、C++或其他编程语言编写的函数,用于初始化和控制TFT LCD,以及与AD转换器通信。 2. **示例代码**:演示如何使用封装库的简单示例,帮助开发者快速上手。 3. **库文件**:包含必要...
光模块的尺寸由封装形式(form factor)决定,而这个封装就是... 定义光模块尺寸的MSA主要是SFP MSA,XFP MSA,CXP MSA,QSFP MSA,CFP MSA,OSFP MSA,和QSFP-DD MSA,也是目前市场上留存下来的几种主要封装形式。
函数是C语言中的重要模块,用于封装可重用的代码段。包括函数声明、定义、调用,以及参数传递、返回值等概念。 5. **数组与指针**: 数组是一组相同类型的元素集合,可以通过索引访问。指针是内存地址的别名,...
ModBus-RTU协议C封装 使用C封装的,可以移植到任何平台。
4G5G模块MSATA盘(M.2_B-KEY+M.2_E-KEY 封装) AD集成封装库,已经其他一些USB3.0 ,RJ45 ,SD卡等,详细封装型号如下: Component Count : 69 Component Name ----------------------------------------------- ...
3. **驱动程序代码**:可能包含用C、C++或其他编程语言编写的示例代码,用于与OLED模块通信,初始化显示、发送命令和数据。 4. **用户手册或数据表**:提供OLED模块的技术规格、电气特性、接口协议等关键信息。 5. *...
4. **头文件(.h)和源文件(.c)**:在C语言中,头文件用来声明函数和全局变量,源文件实现这些声明。通过包含头文件,模块间可以共享接口,同时避免重复声明导致的编译错误。 5. **宏定义**:预处理器宏是C语言中...
5. **ESP32-S2-WROOM 模块封装**:模块封装是指ESP32-S2-WROOM在PCB板上的物理布局和连接方式,这直接影响到模块的电气性能和物理安装。在ESP32S.SchLib中,你可以找到模块的电气符号,而在Esp32S.PcbLib中则是其...
电源模块蓝牙WIFI模块RS485模块DCDC模块Altium封装库三维视图PCB封装库(2D3D封装库),55个封装,PcbLibb后缀文件,封装列表如下: Component Count : 55 Component Name -----------------------------------------...