[C con Clase] "Punteros" a clase
Davidson, Steven
srd4121 en njit.edu
Dom Oct 28 16:32:33 CET 2012
Hola Rafael,
2012/10/28 Rafael Arias Michel <rgam496 en gmail.com>:
> Muchas gracias por su respuesta, Steven.
>
> Podrá apreciar que justamente quería evitar el uso la estructura switch, je,
> je.
>
> Consideré como posible reemplazo, utilizando punteros a funciones, diseñar
> funciones como:
>
> typedef A* (*GeneradorA)();
>
> A* GenerarNuevaB() {return new B();}
> C* GenerarNuevaC() {return new C();}
>
> ¿Será válido lo siguiente?
>
> GeneradorA fA;
> fA = GenerarNuevaB;
> A* varB = fA();
> fA = GenerarNuevaC;
> A* varC = fA();
>
>
Sí. Esto es mejor :) Como no quieres usar un 'switch/case', entonces
puedes crear un array de funciones generadoras a modo de base de
funciones (en lugar de base de datos). Esto es,
typedef A * (*PFGENERADORA)();
A* GenerarNuevaA() { return new A; }
B* GenerarNuevaB() { return new B; }
C* GenerarNuevaC() { return new C; }
PFGENERADORA apfg[] = { GenerarNuevaA, GenerarNuevaB, GenerarNuevaC };
...
void menu( A * &pObj )
{
int opcion;
do
cin >> opcion;
while( 0 > opcion&&opcion > 2 );
pObj = apfg[opcion]();
}
Hasta pronto,
Steven
Más información sobre la lista de distribución Cconclase