Io sono l'attuazione semplice libreria per gli elenchi in C, e ho un problema con la scrittura find
la funzione.Come scrivere funzione C accettare (uno) argomento di qualsiasi tipo
vorrei la mia funzione di accettare qualsiasi tipo di argomento da trovare, sia: find(my_list, 3)
e find(my_list, my_int_var_to_find)
. Ho già informazioni sul tipo di elementi della lista.
Per ora ho trovato paio di modi che si occupano di questo:
funzione diversa con suffisso per diverse tipologie:
int findi(void* list, int i)
,int findd(void* list, double d)
- ma non mi piace questo approccio, sembra che la ridondanza per io e un'API sono confusi.usando l'unione:
typedef union { int i; double d; char c; ... } any_type;
ma in questo modo forzo utente sia per conoscere
any_type
unione, e di creare prima invocazione difind
. Vorrei evitarlo.utilizzando la funzione variadic:
int find(void* list, ...)
. Mi piace questo approccio. Tuttavia, sono preoccupato per le restrizioni sul numero di argomenti. L'utente è libero di scrivereint x = find(list, 1, 2.0, 'c')
anche se non so cosa dovrebbe significare.
ho visto anche la risposta a questa domanda: C : send different structures for one function argument ma è irrilevante, perché voglio accettare argomenti non-puntatore.
Qual è il modo corretto di gestire questa funzione?
Non ce n'è uno. – Mehrdad
Mi piacerebbe avvicinarmi al n. 1 e utilizzare una macro usando il nuovo C11 '_Generic' per distinguere il tipo. – oldrinb