Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Cómo pasar un tipo como parámetro de una función?

Estas en el tema de ¿Cómo pasar un tipo como parámetro de una función? en el foro de C/C++ en Foros del Web. Por ejemplo algo así: Código: void AddService(Type type); Y al llamar a la funcion enviaria un tipo: Código: AddService(std::string) ¿Es posible?...
  #1 (permalink)  
Antiguo 28/11/2012, 08:30
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 8 meses
Puntos: 0
¿Cómo pasar un tipo como parámetro de una función?

Por ejemplo algo así:

Código:
void AddService(Type type);
Y al llamar a la funcion enviaria un tipo:
Código:
 AddService(std::string)
¿Es posible?
  #2 (permalink)  
Antiguo 28/11/2012, 08:38
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: ¿Cómo pasar un tipo como parámetro de una función?

queres pasar un tipo de dato?????
  #3 (permalink)  
Antiguo 28/11/2012, 11:41
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: ¿Cómo pasar un tipo como parámetro de una función?

Si. Estoy pasando un programa de C# a C++ y en este podías enviar "un tipo de dato" para por ejemplo, insertarlo en un Dictionary ( en c++ sería un std::map)

Esta es la función en C#:

Código:
public class GEServiceContainer : GameServiceContainer  
    {
        Dictionary<Type, object> services = new Dictionary<Type ,object>();

        public GEServiceContainer()
        {
        }

        public void AddService(Type Service, object Provider)
        {
            if (!services.ContainsKey(Service))
            {
                base.AddService(Service, Provider);
                this.services.Add(Service, Provider);
            }
        }

        public void RemoveService(Type Service)
        {
            if (services.ContainsKey(Service))
                services.Remove(Service);
                base.RemoveService(Service);
        }
[...]
  #4 (permalink)  
Antiguo 28/11/2012, 11:57
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 11 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
  #5 (permalink)  
Antiguo 28/11/2012, 12:22
 
Fecha de Ingreso: septiembre-2012
Mensajes: 38
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: ¿Cómo pasar un tipo como parámetro de una función?

Muchas gracias por tu respuesta Fw190, me ajustare a tu primer modelo de ejemplo.
  #6 (permalink)  
Antiguo 29/11/2012, 05:37
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: ¿Cómo pasar un tipo como parámetro de una función?

Si quieres pasar un tipo determinado necesitas pasar argumentos asociados a esos tipos e indicarlo antes de instanciar nada. Para la conversión

clase <tipo> objeto(argumento1, argumento2);
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Etiquetas: funcion, string, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:45.