您的位置:首页 > 理论基础 > 数据结构算法

模块对外提供接口 技巧总结

2009-02-21 09:24 381 查看
1: 一个模块需要对外开放一些接口, 使外部可以访问本模块的东东.
最简单/最方便的对外接口是:
SetXXX1()
SetXXX2()
SetXXX3()
GetXXX1()
GetXXX2()
GetXXX3
对每一个类似的功能实现一个对外的接口, 但是这样导致的问题是, 接口太多, 比较乱.
可以提供一个通用的设置/获取数据结构的接口.
EG 1:
int SetxEyeInterfaceState(void* wantState)
由于只有一个参数, wantState,必须为一个固定的结构体.
比如:
//设置/获取界面元素
struct xEyeInterFaceState
{
 int    iType;                  //类型标识1
 char strName[64];       //类型标识2(也可做类型描述)
 float fParameter[10];   //自定义参数(缓冲区)
};

EG 2:
int SetxEyeInterfaceState(char* strName, void* wantState);
int SetxEyeInterfaceState(int iType, void* wantState);

这两个函数都具有两个参数, 这个函数区别与上面函数的特点在于, 可以提供更灵活的参数设置控制.
可以根据strName, 或 iType, 把wantState转换为不同的结构体.

///////////////////////////////
回调函数接口技巧.
回调函数, 一般都要保证有一个void*类型的参数传入, 可以给回调函数的实现者更强大的控制功能.
eg
void GetDeviceIDNotify( const xEyeDeivceIDMsg &msg )
比起
void GetDeviceIDNotify( const xEyeDeivceIDMsg &msg, void * )
 少了些灵活性.
由于回调函数, 不可以是类成员函数, 所以, 回调函数实现里面仅能访问到全局的资源, 这给对c++面向对象的编码者带来了不爽, 如果采用第二种接口定义方式, void* 使得, 使用方可以把其类示例指针传递进去, 这样, 就可以在回调函数里面访问到类内部的变量或函数了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构 struct c