在OO语言中,我们有方法在多个库中强制接口标准化:
Interface
|------Implementation A
|
\------Implementation B我有这样的想法:
Interface.h
|------Implementation A.c
|
\------Implementation B.c其中Interface.h包含:
functionStandard_A()functionStandard_B()在C中实现这种目标的最佳实践是什么?
发布于 2014-04-16 15:54:30
C中的“接口”可以通过定义函数指针的struct来创建。每个“具体实现”都会通过这个struct的一个实例呈现出来,它已经初始化了其中的函数指针,以指向该实现中的函数。
例如,设想创建一个调制解调器驱动程序接口,以便不同的C调制解调器驱动程序具有一组标准的功能。我使用调制解调器驱动程序,因为它们是我现在正在开发的应用程序中的一个很好的例子。
接口示例:
typedef struct modem_interface
{
void (*start_call)(void);
void (*hang_up)(void);
...
}您可能有两个不同的调制解调器驱动程序,modem_A.c和modem_B.c,每个驱动程序都有各自的函数来处理启动调用、挂起调用和其他操作。每个驱动程序都创建一个modem_interface实例,并将其初始化,以便函数指针指向它的函数。
例如,在modem_A.c中:
...
modem_interface modem_A_interface;
modem_interface.start_call = &modem_A_start_call;
...在应用程序的其他地方,您可以获取一个指向调制解调器A‘接口’struct的指针,并调用标准函数(“方法”),因为它们最初是在modem_interface中定义的。
...
modem_A->start_call();
modem_A->hang_up();
...这样,您可以拥有任意数量的调制解调器驱动程序,但是应用程序可以简单地通过modem_interface指针处理其中的任何一个。例如:
void application_starts_a_call( modem_interface* required_modem )
{
required_modem->start_call();
...
}
// elsewhere:
application_starts_a_call( &modem_A );
application_starts_a_call( &modem_B );在我赶出门之前,赶快打出来,所以更正是受欢迎的。希望它能很好地说明这个概念。
https://stackoverflow.com/questions/23113892
复制相似问题