我的应用程序使用int
作为id来识别内存注册表和持久注册表中的对象。应用程序中的函数接收id作为参数,从注册表中检索对象并完成其工作,例如
void print( int id, int bar, double zip, int boo )
{
Object *obj = get_obj_by_id( id );
obj->print( bar, zip, boo );
}
该应用程序已经发展,现在在同一应用程序中可以有多个注册表。该应用程序现在使用一个全局可访问的“当前”注册表,这就像全局变量倾向于引起很多麻烦。
为了摆脱全局“当前”注册表的概念,我需要引入一种类型,该类型在各个注册表之间唯一地标识对象。我无法更改正在使用的
int
的值,因此必须从full_id
id和注册表标识创建int
类型。因此,示例函数必须更改为
void print( full_id id, int bar, double zip, int boo )
{
Object *obj = get_obj_by_id( id );
obj->print( bar, zip, boo );
}
关于id参数的命名有一些约定,但是在整个应用程序中并未严格遵循这些约定,因此我无法对id参数的名称进行假设,也不能假设它始终是第一个参数。此外,还有许多必须更改的功能。用
int
类型化ID替换full_id
类型化ID的最有效,最可靠的方法是什么? 最佳答案
大概您的新类型不是数字-这有点像struct
吗?
typedef struct _full_id {
int registry_id;
int object_id;
} full_id;
如果是这样,那么您可以仅从更改处理ID的低级函数开始,例如您的示例中的
get_obj_by_id()
函数。更改该函数以使用full_id
参数而不是int
后,重新编译整个程序。现在,由于类型不匹配,所有调用此函数的 call 站点都应报告错误-您可以转到这些 call 站点并修复其参数类型。漂洗,重复,最后将它们全部修复。
祝您好运(我敢打赌,您希望现在开始使用
typedef
吗?;)