您的位置:首页 > 其它

用函数指针来提供统一的接口

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)即可实现相应函数的调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数指针 接口