Hola a todos,
Me encuentro con una duda de diseño, y que no me convence del todo... Necesito trabajar con estructuras dinámicas, de diferentes tipos.
Todos conocemos el esquema:
TMiEstructura = array of tipo;
TMiEstructura2 = array of array of tipo;
...
tipo´puede ser integer, double, TComplex, TLoQueSea...
Inicialmente lo estaba entendiendo como una clase abstracta que me permitiera definir lo básico, con algunos métodos virtuales y/o abstractos para que las clases que hereden de esta pudiera aprovechar. Por darle un nombre digamos TArray.
De ésta pensaba heredar una TMatrix, para llevarlo al plano de 2 dimensiones. Esta clase se encarga de hacer el trabajo de mantener la estructura, de dimensionarla, ofrece propiedades para saber la cantidad de filas y columnas, y obviamente una propiedad (quizá doble vectorial... si es que el compilador no se queja) para poder acceder a la "data" matricial.
Y aquí me puse a pensar ¿Y como le hago para meterle los tipos? No quisiera estar generando TIntegerMatrix, TDoubleMatrix, TLoQueSea... En cierta forma, independiente del tipo el "cuerpo" de éstas especializaciones es el mismo: lo que cambia es el tipo, asi que... me puse a pensar, ¿Se podría usar el poder de los genéricos?
Es decir, ¿es posible combinar arrays dinámicos que acepten integer, double, TComplex, TLoQueVenga....? ¿Hasta donde se puede llegar? ¿El poder y gracia de los genéricos es que uno no necesita estar generando clases y decirle al compilador usame la clase X con el tipo Y? ¿Voy entendiendo bien?
¿Hasta donde llega el poder de los genéricos? ¿Es sólo con tipos de datos simples? ¿O puede aceptar un tipo record/clase?
No estoy encontrando material de referencia como para sacarme estas dudas.
¿Y si yo ahora, necesito definir otra clase más, una T3DArray que se especialice en 3 dimensiones? Como ven, tengo una combinaciones interesantes de dimensiones y tipos y la verdad se me está comiendo un poco la cabeza.
¿Que alternativas y/o propuestas imaginan ustedes?
Saludos,