Heredé una gran aplicación que fue escrita originalmente en C (pero mientras tanto, también se le agregó una gran cantidad de C++). Debido a razones históricas, la aplicación contiene muchos punteros vacíos. Antes de que empiece a ahogarse, permítame explicar por qué se hizo esto.Cómo deshacerse de los huecos-punteros
La aplicación contiene muchas estructuras de datos diferentes, pero se almacenan en contenedores 'genéricos'. Hoy en día usaría contenedores STL con plantillas para ello, o daría a todas las estructuras de datos una clase base común, de modo que el contenedor pueda almacenar punteros a la clase base, pero en los [buenos] viejos días C, la única solución era lanza el struct-pointer a un void-pointer.
Además, hay una gran cantidad de código que funciona en estos vacíos triples, y utiliza las construcciones C muy extrañas para emular polimorfismo en C
ahora estoy reelaboración de la aplicación, y tratando de deshacerse de la huecos-punteros. Agregar una clase base común a todas las estructuras de datos no es tan difícil (pocos días de trabajo), pero el problema es que el código está lleno de construcciones como se muestra a continuación.
Este es un ejemplo de cómo se almacenan los datos:
void storeData (int datatype, void *data); // function prototype
...
Customer *myCustomer = ...;
storeData (TYPE_CUSTOMER, myCustomer);
Este es un ejemplo de los datos de cómo se obtiene de nuevo:
Customer *myCustomer = (Customer *) fetchData (TYPE_CUSTOMER, key);
realidad quiero reemplazar todos los vacíos triples con algún puntero inteligente (contado por referencia), pero no puedo encontrar un truco para automatizar (o al menos) ayudarme a deshacerme de todos los lanzamientos hacia y desde punteros vacíos.
Algún consejo sobre cómo buscar, reemplazar, o interactuar de cualquier manera posible con estas conversiones?
Realmente creo que no hay truco para hacer esto automáticamente. Uno tras otro ... – INS
¿Qué hacen las funciones de almacenamiento y recuperación con 'datatype'? ¿Están haciendo una copia oculta de la estructura o simplemente almacenando ese puntero vacío? –
El tipo de datos se usa para almacenar todos los datos del mismo tipo de datos juntos, y para ejecutar alguna lógica 'común' en los tipos de datos. Como se dijo, emula el polimorfismo en la C. – Patrick