jueves, 1 de abril de 2010

Código genérico en C

En C, voy a explicaros cómo introducir algo de genericidad en vuestros programas C.
Todos sabemos que C no es un lenguaje orientado a objetos y que no conoce los conceptos de polimorfismo, sobrecarga... entonces, ¿Como se puede escribir código genérico con este lenguaje? La respuesta es sencilla: jugando con (void *).
El puntero a void puede representar nada o cualquier cosa, así que jugando con los castings podemos introducir un cierto grado de genericidad en nuestro código.
De esta manera, si tenemos un void *elemento, podemos hacer que ese elemento sea una cadena, un entero, un float... o cualquier TDA.
Veamos un ejemplo ilustrativo de una idea básica de cómo hacerlo.




















En el ejemplo encuadro en rojo lo que sería nuestro TDA. Este TDA va a ser muy sencillito, solo incluye un elemento ( o muchos, si hacemos que elemento sea un array ).
Lo que quería mostraros es como insertar en ese TDA un entero y una cadena.
Realmente esto debería estar en 3 ficheros distintos. Por un lado tenemos el genérico, que sería el que implementa el TDA CeldaGenerica y contendría todas las operaciones que se pueden realizar sobre ella, es decir, todas las que se puedan realizar sobre void.
Y por otro los otros 2, que serían los específicos del tipo de datos en concreto (cadena, entero, flotante...).
Así, podemos tener un fichero genérico, por ejemplo, que implmente una lista de elementos, y otro más específico que haga uso del genérico que implemente una lista de enteros.

Esto es todo, espero que os sirva de ayuda.
SALUDOS!!

No hay comentarios:

Publicar un comentario