[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