web-dev-qa-db-fra.com

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

J'obtiens cette erreur pour chaque surcharge essayée:

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

Je ne trouve aucune bonne documentation sur la surcharge des opérateurs. La recherche sur Google aboutit à des didacticiels C++ qui utilisent des classes. En C, il n'y a pas de cours. Quelqu'un peut-il m'aider? Merci.

30
user142019

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

57
Jerry Coffin

Il n'y a pas de surcharge d'opérateur en C.

22
Justin Ardini

Vous avez besoin d'une machine à remonter le temps pour vous ramener à 1985, afin que vous puissiez utiliser le programme CFront . Il semble que "C" soit utilisé pour prendre en charge la surcharge des opérateurs; au plus sophistiqué qu'il peut encore. Voir À l'intérieur du modèle d'objet C++ par Stanley B. Lippman . OMG, C++ était C! Telle ne chose existe toujours.

Cette réponse confirme les autres. "C" en lui-même ne prend pas directement en charge 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 la source pour l'implémenter. Dans ce cas, de tels outils existent déjà.

Un article, Meta-Compilation for C++, 2001 par Edward D. Willink a des exemples intéressants de fonctionnalité de conception, où l'extension d'un langage est utile. La combinaison du script Shell * nix et des règles make permet souvent une telle transformation. D'autres exemples sont Qt MOC, les outils Lex et Yacc, etc. Hébergez les outils.

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

17
artless noise

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

15

C ne prend pas du tout en charge la surcharge de l'opérateur.

Vous ne pouvez implémenter des opérations qu'en tant que 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 exagéré de le faire juste pour la surcharge.

8
Roberto Bonvallet

La surcharge d'opérateur n'est pas disponible en C. Au lieu de cela, vous devrez 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
}
5
bta