[C con Clase] Tipo Void

metuskale metuskale en gmail.com
Dom Oct 2 16:19:54 CEST 2011


Muchas gracias, voy a probar
>    {
>      min = i;
>      for(j = i+1;j < v_size;j++)
>      {
>        if(f(a+min*t_size,a+j*t_size) >= 0)
>        {
>          min = j;
>        }
>      }
>      memcpy(tmp,a+i*t_size,t_size);
>      memcpy(a+i*t_size,a+min*t_size,t_size);
>      memcpy(a+min*t_size,tmp,t_size);
>
>    }
>    free(tmp);
>
> }
>
> Esto compila con gcc por que trata la aritmética de punteros void como si se
> tratase de punteros char, pero con otros compiladores habría que hacerse el
> casteo explícito a char *.
> Saludos
>
> El 1 de octubre de 2011 11:55, Pablo Alejandro Herrero
> <pablusplus en gmail.com> escribió:
>>
>> Hola. Tenés varias opciones pero lo mas rápido que se me ocurre es que
>> indiques el tipo de dato con otro parámetro:
>>
>> #define   ENTERO    0
>> #define   FLOTANTE 1
>> #define   CADENA    2
>> bubble(void *array, tipo_retorno *puntero_a_funcion(tipo_args), int tipo){
>>     ...
>>     switch(tipo)
>>          case ENTERO:
>>               ...(int *)array[índice_a_elemento]...
>>          break;
>>          case FLOTANTE:
>>                ...(float *)array[índice_a_elemento]...
>>          break;
>>          case CADENA:
>>                ...(char *)array[índice_a_elemento]...
>>          break;
>>          default:
>>          break;
>> }
>>
>> seria algo asi: indicar el tipo de dato, y usar una selección explícita de
>> tipo (explicit cast). Cuidado con: hay que indicar los argumentos de la
>> funció en puntero_a_función (yo usaria el operador ... para definirla,
>> aunque después tenés que tomar los parámetros desde la pila) y lo otro es
>> que indice_a_elementos no debe exceder el tamaño del array porque sino tenés
>> una excepción por violacion de acceso a memoria. Espero te sirva!
>>
>> El 1 de octubre de 2011 06:02, metuskale <metuskale en gmail.com> escribió:
>>>
>>> Buenas, estoy intentando realizar unas funciones lo mas genéricas
>>> posibles con el fin de crear una pequeña librería y re aprovecharla en
>>> varias practicas.
>>> Lo primero que quiero hacer, y que servirá de ejemplo es un bubbleSort
>>> que reciba un array de tipo void y un puntero a una funcion de
>>> comparacion en funcion del tipo que se quiera ordenar.
>>> El problema que tengo y no se como resolver es como usar y convertir
>>> el tipo void o void* del array al tipo correcto, es decir:
>>>
>>> void bubble (void* datos, "puntero a funcion") {
>>>
>>>
>>>
>>> }
>>>
>>> Saludos y gracias a todos
>>>
>>> --
>>> David de Alvarado Lacruz
>>>
>>> _______________________________________________
>>> Lista de correo Cconclase Cconclase en listas.conclase.net
>>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
David de Alvarado Lacruz




Más información sobre la lista de distribución Cconclase