Mon application utilise un int
comme identifiant pour identifier les objets dans le registre en mémoire et le registre permanent. Les fonctions de l'application reçoivent l'ID en tant qu'argument, extraient l'objet du registre et font leur travail, par ex. L'application a évolué et il est maintenant possible d'avoir plus d'un registre dans la même application. L'application utilise maintenant un registre «courant» globalement accessible, ce qui, comme le font généralement les globales, cause beaucoup de problèmes. Pour se débarrasser du concept d'un registre global 'courant', je devrais introduire un type qui identifie de manière unique l'objet à travers les registres. Je ne peux pas changer la valeur du int
qui est utilisé, donc je dois créer un type full_id
à partir de l'ID int
et une identification du registre. La fonction exemple aurait donc devoir changer deRefactorisation d'un type d'ID
void print(full_id id, int bar, double zip, int boo)
{
Object *obj = get_obj_by_id(id);
obj->print(bar, zip, boo);
}
Il existe des conventions sur la désignation des arguments d'identité, mais ceux-ci ne sont pas rigoureusement suivies dans toute l'application, je ne peux pas faire des hypothèses sur le nom de l'argument id, ou que c'est toujours le premier argument. De plus, il y a beaucoup de nombreuses fonctions qui doivent être changées. Quelle est la manière la plus efficace et la plus fiable de remplacer les ID typés int
par full_id
?
+1 pour mentionner que typedef aurait résolu le problème beaucoup plus facile. – Patrick