Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/11/2012, 11:57
Fw190
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 14 años, 7 meses
Puntos: 73
Respuesta: ¿Cómo pasar un tipo como parámetro de una función?

No puedes pasar como parámetro un tipo de dato a una función. Tienes que pasar un dato, que será de un tipo determinado. Te indico un par de modos de "hacerlo" en C (pero pasando dos parámetros):

1.- Pasa la dirección de tu dato mediante un puntero void y un indicador del tipo de dato que estás pasando. Por ejemplo:

Código C:
Ver original
  1. #define VAL_ENTERO    1
  2. #define VAL_DOUBLE    2
  3.  
  4. void AddService(void *ptr, int tipo);
  5.  
  6. int        n;
  7. double    x;
  8.  
  9. ...
  10.  
  11. AddService((void *)n, VAL_ENTERO)
  12. AddService((void *)x, VAL_DOUBLE)
  13.  
  14. ...
  15.  
  16. void AddService(void *ptr, int tipo)
  17. {
  18.     switch (tipo)
  19.     {
  20.         case VAL_ENTERO:
  21.             ...
  22.             break;
  23.         case VAL_DOUBLE:
  24.             ...
  25.             break;
  26.     }
  27. }

2.- Mediante una unión (por referencia o valor) y un indicador del tipo de dato:

Código C:
Ver original
  1. #define VAL_ENTERO    1
  2. #define VAL_DOUBLE    2
  3.  
  4. typedef union
  5. {
  6.     int        valInt;
  7.     double    valDbl;
  8. }
  9. TipoMiDato;
  10.  
  11. void AddService(TipoMiDato Dato, int tipo);
  12.  
  13. ...
  14.  
  15. TipoMiDato MiDato;
  16.  
  17. ...
  18.  
  19. MiDato.valInt = 7;
  20. AddService(MiDato, VAL_ENTERO)
  21. ...
  22. MiDato.valDbl = 1.333;
  23. AddService(MiDato, VAL_DOUBLE)
  24.  
  25. ...
  26.  
  27. void AddService(TipoMiDato Dato, int tipo)
  28. {
  29.     int        n;
  30.     double    x;
  31.  
  32.     switch (tipo)
  33.     {
  34.         case VAL_ENTERO:
  35.             n = Dato.valInt;
  36.             ...
  37.             break;
  38.         case VAL_DOUBLE:
  39.             x = Dato.valDbl;
  40.             break;
  41.     }
  42. }

No creo que sea difícil aplicar algo parecido en C++ (mis conocimientos de C++ son, de momento, muy básicos).

Saludos,

Edito: Después de escribir esto veo tu respuesta, en la que veo que la función AddService toma dos parámetros, y aparentemente la idea no es muy diferente de lo que te he posteado.

Última edición por Fw190; 28/11/2012 a las 12:04