unarios sobrecarga polimorfismo operadores metodos matrices funciones c generics function-overloading c11

polimorfismo - sobrecarga de operadores c++ pdf



Expresiones genéricas de tipo C11: ¿por qué no agregar simplemente la sobrecarga de funciones? (1)

Acabo de leer el artículo de Wikipedia sobre C11 , la nueva versión del estándar C lanzado en diciembre de 2011, y vi que una de las características agregadas era "expresiones genéricas de tipo":

Expresiones de tipo genérico utilizando la palabra clave _Generic . Por ejemplo, la siguiente macro cbrt (x) se traduce a cbrtl (x) , cbrt (x) o cbrtf (x) según el tipo de x :

#define cbrt(X) _Generic((X), long double: cbrtl, / default: cbrt, / float: cbrtf)(X)

Esto me parece bastante horrible: si van a cambiar el idioma de todos modos, ¿por qué no agregar la sobrecarga de funciones como en C ++?


C tiene un espacio de nombres para los símbolos externos y aplica la ODR (Regla de una definición) de manera que dos objetos extern con el mismo nombre en dos unidades de traducción deben tener la misma definición.

Aunque es posible crear un ABI de C que admita la sobrecarga, la principal fortaleza de C es su simplicidad ABI. En casi todas las plataformas "el" ABI es el ABI de C, y desempeña algún papel en la ejecución sin importar el idioma de origen. Esto se perdería si los símbolos tuvieran que incluir información de tipo.

TGE (como lo usa la biblioteca) es solo una versión manual de la manipulación de nombres. Hace (o hará, en un futuro posiblemente muy lejano) el trabajo que debe hacer, para permitir que las declaraciones de typedef controlen la generación de bucles internos con un uso intensivo de las matemáticas. Las personas que necesitan las características de un lenguaje como C ++ deben migrar a C ++.