Surcharge de l’opérateur en C

J’essaie de surcharger certains opérateurs:

/* 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); 

Je reçois cette erreur pour chaque surcharge essayée:

 expected '=', ',', ';', 'asm' or '__atsortingbute__' before '+' token 

Je ne trouve pas de bonne documentation sur la surcharge de l’opérateur. La recherche sur Google aboutit à des tutoriels C ++ utilisant des classes. En C il n’y a pas de cours. Quelqu’un peut-il m’aider? Merci.

C ne supporte pas la surcharge de l’opérateur (au-delà de ce qu’il a intégré dans le langage).

Il n’y a pas de surcharge de l’opérateur en C.

Vous ne pouvez pas surcharger ces opérateurs en C.

Vous avez besoin d’une machine à remonter le temps pour vous ramener à 1985, afin de pouvoir utiliser le programme CFront . Il semble que “C” soit utilisé pour supporter la surcharge de l’opérateur; à la sophistiqué assez il peut encore. Voir À l’intérieur du modèle d’object C ++ par Stanley B. Lippman . OMG, C ++ était C! Une telle chose existe toujours.

Cette réponse confirme les autres. “C” en soi ne supporte pas directement la surcharge. Cependant, le point important est qu’un programmeur peut écrire du code qui comprend le code. Vous avez besoin d’un outil qui transforme le source pour implémenter ceci. Dans ce cas, de tels outils existent déjà.

Un document, Meta-Compilation for C ++, 2001 par Edward D. Willink propose des exemples intéressants de fonctionnalités de conception , dans lesquels l’extension d’un langage est utile. La combinaison de script shell * nix et de règles de création permet souvent une telle transformation. Qt MOC, les outils Lex et Yacc, etc. en sont un autre exemple. Ainsi, même si C ne tient pas compte de cela directement, il le fait si vous construisez des outils d’ hôte .

Dans cet exemple particulier, la surcharge peut ne pas avoir de sens. Cependant, cela pourrait avoir beaucoup de sens pour un programme nécessitant des calculs mathématiques avec une précision arbitraire .

C ne supporte pas du tout la surcharge de l’opérateur.

Vous ne pouvez implémenter des opérations que comme fonctions:

 Colour colour_add(Colour c1, Colour c2); Colour colour_substract(Colour c1, Colour c2); ... 

Vous pouvez également passer au C ++, mais il peut être excessif de le faire uniquement pour la surcharge.

La surcharge d’opérateurs n’est pas disponible en C. Vous devrez plutôt utiliser une fonction pour “pseudo-surcharger” les opérateurs:

 Colour add_colours(Colour c1, Colour c2) { return c1 + c2; // or whatever you need to do } 

Si vous voulez une concision comparable, l’utilisation de macros est la meilleure alternative disponible:

 void Type_getSomething(int id); //or some other complex series of instructions #define g(id) Type_getSomething(id) 

… dommage que l’utilisation des crochets ne soit pas possible pour les macros!