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

Funcion de argumentos variables con string

Estas en el tema de Funcion de argumentos variables con string en el foro de C/C++ en Foros del Web. Hola quiero hacer una funcion que reciba argumentos string y los imprima. Asi de simple pero no se que pasa que no funciona: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); ...
  #1 (permalink)  
Antiguo 21/02/2014, 11:12
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Funcion de argumentos variables con string

Hola quiero hacer una funcion que reciba argumentos string y los imprima. Asi de simple pero no se que pasa que no funciona:

Código C++:
Ver original
  1. void print(string a, ...) {
  2.    va_list p;
  3.    va_start(p, a);
  4.    string arg=va_arg(p,string);
  5.    while (1) {
  6.        if(typeid(string).name()=="string"){
  7.            cout << arg << endl;
  8.            arg=va_arg(p,string);
  9.        }else{
  10.            break;
  11.        }
  12.    }
  13.    va_end(p);
  14. }

Porque??

Saludos
  #2 (permalink)  
Antiguo 21/02/2014, 12:18
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Funcion de argumentos variables con string

Al parecer vargargs es solo para tipos nativos del lenguaje (char,int,float,double) y punteros a ellos, no para structs o tipos provenientes de clases.

Sugiero cambiar a char *, lo mas cercano a string que tienes.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 26/02/2014, 05:56
 
Fecha de Ingreso: junio-2010
Ubicación: Madrid
Mensajes: 620
Antigüedad: 13 años, 10 meses
Puntos: 73
Respuesta: Funcion de argumentos variables con string

Como CalgaryCorpus, creo que varargs es solamente para los tipos nativos de C y sus versiones signed/unsigned/long, así como los punteros correspondientes. Las estructuras de datos, mejor pásalas mediante un puntero.

Ten en cuenta que en una función con número variable de argumentos no puedes conocer de antemano el número de argumentos que se han pasado, salvo que lo indiques de alguna manera mediante alguno de los argumentos (y tendrías que chequearlo dentro de tu función). Por mi experiencia personal, no pasa nada si luego lees menos argumentos de los que has pasado, pero puede haber problemas si intentas leer más de los que has pasado. Y, si es posible, dentro de la función lee los argumentos cuanto antes y cierra con la llamada a va_end(), procurando no llamar a ninguna función entre lectura y lectura de argumentos.

De todos modos, si vas a trabajar con C++, plantéate si realmente necesitas funciones con número variable de argumentos o puedes resolver tu problema con la sobrecarga de funciones.

Saludos,
  #4 (permalink)  
Antiguo 26/02/2014, 10:42
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Funcion de argumentos variables con string

Lo necesito porque tengo una clase que contiene una lista que quiero cambiar la dando los valores en char * como argumentos en una funcion miembro.

Voy a intentar otra cosa

Etiquetas: argumentos, funcion, string, variables
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 16:17.