sencillos - Sobrecarga del operador en C
sobrecarga de operadores relacionales (7)
C no admite la sobrecarga del operador (más allá de lo que se incorporó al lenguaje).
Estoy intentando sobrecargar algunos operadores:
/* Typedef is required for operators */
typedef int Colour;
/* Operators */
Colour operator+(Colour colour1, Colour colour2);
Colour operator-(Colour colour1, Colour colour2);
Colour operator*(Colour colour1, Colour colour2);
Colour operator/(Colour colour1, Colour colour2);
Me sale este error por cada sobrecarga probada:
expected ''='', '','', '';'', ''asm'' or ''__attribute__'' before ''+'' token
No puedo encontrar ninguna buena documentación sobre la sobrecarga del operador. Google busca resultados en tutoriales de C ++ que usan clases. En C no hay clases. ¿Alguien puede ayudarme? Gracias.
C no admite la sobrecarga del operador en absoluto.
Solo puede implementar operaciones como funciones:
Colour colour_add(Colour c1, Colour c2);
Colour colour_substract(Colour c1, Colour c2);
...
También puede cambiar a C ++, pero puede ser excesivo hacerlo solo por la sobrecarga.
La sobrecarga del operador no está disponible en C. En su lugar, deberá usar una función para "pseudo-sobrecargar" a los operadores:
Colour add_colours(Colour c1, Colour c2) {
return c1 + c2; // or whatever you need to do
}
Necesita una máquina del tiempo que lo lleve de regreso a 1985, para que pueda usar el programa CFront . Parece que ''C'' se usa para soportar la sobrecarga del operador; a lo suficientemente sofisticado que todavía puede. Véase Inside the C ++ Object Model por Stanley B. Lippman . ¡OMG, C ++ era C! Tal cosa todavía existe.
Esta respuesta confirma a los demás. ''C'' en sí mismo no soporta directamente la sobrecarga. Sin embargo, el punto importante es que un programador puede escribir código que entiende el código. Necesita una herramienta que transforma la fuente para implementar esto. En este caso, tales herramientas ya existen.
Un documento, Meta-Compilation for C ++, 2001 de Edward D. Willink tiene ejemplos interesantes de funcionalidad de diseño , donde la extensión de un idioma es útil. La combinación de * nix shell script y make
rules a menudo permiten dicha transformación. Otros ejemplos son Qt MOC, las herramientas Lex y Yacc, etc. Por lo tanto, aunque ''C'' en sí no lo acomode directamente, sí lo hace si construye herramientas de host .
En este ejemplo particular, la sobrecarga puede no tener sentido. Sin embargo, podría tener mucho sentido para un programa que necesita matemática de precisión arbitraria .
No hay sobrecarga del operador en C.
No puede sobrecargar estos operadores en C.
Si desea una concisión comparable, el uso de macros es la mejor alternativa disponible:
void Type_getSomething(int id); //or some other complex series of instructions
#define g(id) Type_getSomething(id)
... ¡Es una lástima que el uso de corchetes no sea posible para las macros!