Stavo leggendo l'articolo di Wikipedia sul C11, la nuova versione dello standard C rilasciato nel dicembre 2011, e ho visto che una delle caratteristiche aggiunte era "espressioni di tipo generico":Espressioni di tipo C11: perché non aggiungere semplicemente l'overloading di funzione?
Type-generic espressioni usando la parola chiave
_Generic
. Ad esempio, il seguente macro cbrt (x) traduce cbrtl (x), cbrt (x) o cbrtf (x) a seconda del tipo di x:#define cbrt(X) _Generic((X), long double: cbrtl, \ default: cbrt, \ float: cbrtf)(X)
Questo mi sembra abbastanza orribile - se cambieranno comunque il linguaggio, perché non aggiungere semplicemente l'overloading di funzioni come in C++?
Probabilmente perché ciò richiederebbe un manomissione del nome e _Generic può essere risolto completamente in fase di compilazione. Ad ogni modo, se sei serio riguardo alla programmazione generica non dovresti guardare a C. –
l'overloading della funzione probabilmente incorre in un enorme problema di compatibilità all'indietro in quasi tutte le implementazioni (pensa a come i runtime/linker/caricatori trattano i simboli) – nos
@CatPlusPlus: Il sovraccarico per le funzioni dichiarate "in linea" avrebbe fornito il 99% del vantaggio derivante dall'overloading generale delle funzioni, senza problemi di manomissione del nome. Anche se si desidera essere in grado di chiamare una funzione sovraccaricata da altri moduli, si potrebbe semplicemente includere all'interno del file di intestazione funzioni "inline" sovraccariche che chiamerebbero quindi funzioni con nomi diversi per diversi tipi di parametri. I nomi delle funzioni sarebbero specificati nel file di intestazione, quindi non sarebbe richiesto alcun manichino specifico del compilatore. Ci sarebbe stato qualche problema con quello? – supercat