为什么要写这个,因为这篇文章很基础,使用c++或c的人经常会遇到这样的问题。
和同事分别写不同的模块, 有一天发现有点问题要和同事商量下,修改下接口。 这一修改不打紧, 意味着很有可能会让以前的程序崩溃,而且要是接口被很多调用,嘿嘿。 这是软件工程中的臭味。
怎么设计接口才能避免这种问题呢? 函数只带固定的几个参数,而且接口变化时,参数个数不能变化,也就是说不能改变函数接口。 有的人可能想到了使用数据结构。
例如:
typedef struct
{
int param1;
float param2;
int param3;// note: xx年xx月,为了实现xx功能添加了新的参数。
}PARAM_T;
int A(PARAM_T ¶m);
//! 这是一种方法,我以前也提倡这样用。 添加一个新的参数,只要双方约定好后,添加新的参数,对老的程序不会有影响。 而且扩充了新的功能。 当然最好是把这数据结构定义在一个文件中,要用到该接口的函数都要引用该文件,这样就不会照成, 接口不匹配的问题。 有个问题是这个参数,只能增加,不能减少,原因我想大家都很清楚。
当然数据结构是完全可以胜任,函数参数变化的情况的。 在QT中可以使用 QVariant, 在函数中把QVariant 转换成map 如下:
int A (QVaraint & v)
{
QMap param = v.toMap();
//好处是可以直接通过名称来检索参数值。而且可以动态添加。
...
}
不用qt的同学就要叫了,我不用qt 有什么好方法么? 那用boost的any.
这篇文章是对我上一篇文章的补充,因为上一遍文章介绍了,通过map的key 来调用成员函数。 要是成员函数的参数不一样,那也达不到通用性。 所以上一遍文章中介绍的方法和本篇文章介绍的方法要结合使用,功力就会大增。
阅读(2726) | 评论(0) | 转发(0) |