用函数指针来提供统一的接口
2014-02-22 00:36
183 查看
函数指针的一个作用是用来提供统一的接口。
假设我们需要对许多型号的硬件向上同意的读写函数。这些不同的硬件的读写接口时不同的。
我们在向上的头文件只有read()和write()两个函数,其它程序只能通过这两个函数来读写不同的硬件,那么我们该如何实现接口的统一呢?
1.假设我们有N种型号的硬件,我们先定义一个enum变量
typedef enum {
HW_TYPE_A,
HW_TYPE_B,
...
HW_TYPE_N
} hwModleStd;
2.每种类型的硬件都有自己的读写接口,分别为
read_type_x(...);
write_type_x(...);
我们用函数指针分别定义两个数组:
void (*readFx[HW_TYPE_N])(...) =
{
read_type_a,
read_type_b,
...
read_type_N//每种类型的读函数的名字。注意保持返回值、参数跟指针函数一致
};
void (*writeFx[HW_TYPE_N])(...) =
{
write_type_a,
write_type_b,
...
write_type_N//每种类型的写函数的名字。注意保持返回值、参数跟指针函数一致
};
3.然后我们定义统一read/write接口,接口有一个对硬件类型进行选择的参数:
void read(hwModleStd hwType, ...){
return readFx[hwType](...);
}
void write(hwModleStd hwType, ...){
return writeFx[hwType](...);
}
这样,上层的应用在调用读写接口时只需传入一个型号选择便可以调用对应的读写函数了。
举个例子。
有A, B两种硬件,每种硬件的read函数实现不一样。我们要给上层提供一个统一的read接口。我们可以考虑这样实现。
//硬件A 的read函数实现
int read_a(int reg) {
return reg+3;
}
//硬件B 的read函数实现
int read_b(int reg) {
return reg+4;
}
typedef enum {
HW_TYPE_A,
HW_TYPE_B,
HW_TYPE_END
} hwType;
int (*readFx[HW_TYPE_END])(int ) = {
read_a,
read_b
};
//好了,我们可以定义我们统一的read接口了.我们需要提供一个硬件型号进行选择的参数
int read(hwType hw_type, //进行硬件型号选择的参数
int reg//这个参数用来传值
)
{
return readFx[hw_type](reg);
}
这样我们在调用时直接调用read(type, reg)即可实现相应函数的调用。
假设我们需要对许多型号的硬件向上同意的读写函数。这些不同的硬件的读写接口时不同的。
我们在向上的头文件只有read()和write()两个函数,其它程序只能通过这两个函数来读写不同的硬件,那么我们该如何实现接口的统一呢?
1.假设我们有N种型号的硬件,我们先定义一个enum变量
typedef enum {
HW_TYPE_A,
HW_TYPE_B,
...
HW_TYPE_N
} hwModleStd;
2.每种类型的硬件都有自己的读写接口,分别为
read_type_x(...);
write_type_x(...);
我们用函数指针分别定义两个数组:
void (*readFx[HW_TYPE_N])(...) =
{
read_type_a,
read_type_b,
...
read_type_N//每种类型的读函数的名字。注意保持返回值、参数跟指针函数一致
};
void (*writeFx[HW_TYPE_N])(...) =
{
write_type_a,
write_type_b,
...
write_type_N//每种类型的写函数的名字。注意保持返回值、参数跟指针函数一致
};
3.然后我们定义统一read/write接口,接口有一个对硬件类型进行选择的参数:
void read(hwModleStd hwType, ...){
return readFx[hwType](...);
}
void write(hwModleStd hwType, ...){
return writeFx[hwType](...);
}
这样,上层的应用在调用读写接口时只需传入一个型号选择便可以调用对应的读写函数了。
举个例子。
有A, B两种硬件,每种硬件的read函数实现不一样。我们要给上层提供一个统一的read接口。我们可以考虑这样实现。
//硬件A 的read函数实现
int read_a(int reg) {
return reg+3;
}
//硬件B 的read函数实现
int read_b(int reg) {
return reg+4;
}
typedef enum {
HW_TYPE_A,
HW_TYPE_B,
HW_TYPE_END
} hwType;
int (*readFx[HW_TYPE_END])(int ) = {
read_a,
read_b
};
//好了,我们可以定义我们统一的read接口了.我们需要提供一个硬件型号进行选择的参数
int read(hwType hw_type, //进行硬件型号选择的参数
int reg//这个参数用来传值
)
{
return readFx[hw_type](reg);
}
这样我们在调用时直接调用read(type, reg)即可实现相应函数的调用。
相关文章推荐
- fastjson处理接口时的一个问题
- 局域网与广域网接口标准
- RJ-45接口信号定义
- DVI 视频接口图文解析
- 如何设置域名接口
- 基于C# 中可以new一个接口?的问题分析
- java 抽象类和接口的区别详细解析
- PHP面向对象的进阶学习(抽像类、接口、final、类常量)
- 深入分析php中接口与抽象类的区别
- JAVA 继承基本类、抽象类、接口介绍
- c#中抽象类和接口的详细介绍
- 路由器接口及连接
- C语言中函数与指针的应用总结
- 函数指针与指针函数的学习总结
- C++中的函数指针与函数对象的总结
- 深入解析函数指针与返回函数的指针
- 如何通过函数指针调用函数(实现代码)
- C++中抽象类和接口的区别介绍
- C#委托所蕴含的函数指针概念详细解析
- 开源免费天气预报接口API及全国所有地区代码(国家气象局提供)