La surcharge d'opérateur en C
Je suis en train de la surcharge de 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 essayé de surcharge:
expected '=', ',', ';', 'asm' or '__attribute__' before '+' token
Je ne peux pas trouver une bonne documentation sur la surcharge d'opérateur. Googler résultats en C++ tutoriels qui utilisent les classes. En C il n'y a pas de classes. Quelqu'un peut-il m'aider? Merci.
- Il suffit de ne pas :). Quoi de mal avec
struct RGB {int8_t red, green, blue;};
. Avez-vous vraiment besoin de tout ce que meta, tout le putain de temps? - Même si C serait en charge de la surcharge d'opérateur: ne opérateur* opérateur et/ sens sur les couleurs?
- Brun - Pourquoi ne serait-il pas de sens? Une fois que les opérateurs sont surchargés, ils pourraient dire quelque chose, pas juste "multiplier" et "fracture".
- d'accord, mais quand ils ne le font pas dire de multiplier et de diviser, pourquoi s'embêter avec la surcharge à tous? Même en C++, il est très mauvais style de la surcharge d'opérateur lorsque les opérateurs ne correspondent pas à l'original de leurs significations.
- "ne opérateur* opérateur et/ sens sur les couleurs?" Alpha (pre)de la multiplication, peut-être?
Vous devez vous connecter pour publier un commentaire.
C ne supporte pas la surcharge d'opérateur (au-delà de ce qu'il construit dans la langue).
const
"sucre syntaxique". Mais j'avoue que je n'ai pas lu la définition stricte en temps.Il n'y a pas de surcharge d'opérateur en C.
-
,+
,/
,*
, tous s'appliquent tout aussi bien àint
oudouble
. Ce qu'il ne prend pas en charge l'ajout de tout les surcharges au-delà de ce qui est construit en.Vous avez besoin d'un time machine pour vous ramener à 1985, de sorte que vous pouvez utiliser le programme CFront. Il semble que le 'C' utiliser à l'appui de la surcharge d'opérateur; à la fois assez sophistiqué, il est encore temps. Voir à l'Intérieur du C++ Object Model par Stanley B. Lippman. OMG C++ a été C! Ces une chose existe toujours.
Cette réponse confirme les autres. "C" par lui-même ne prend pas directement en charge de la surcharge. Toutefois, le point important est un programmeur peut écrire du code qui comprend le code. Vous avez besoin d'un outil qui transforme source pour mettre en œuvre cette. Dans ce cas, de tels outils existent déjà.
Un papier, Méta-Compilation en C++, 2001 par Edward D. Willink a des exemples intéressants de des fonctionnalités de conception de, où l'extension d'une langue est utile. La combinaison de *nix script shell et
make
règles permettent souvent d'une telle transformation. D'autres exemples sont Qt MOC, les outils Lex et Yacc, etc. Ainsi, alors que le " C " ne doit pas tenir compte de cette directement, il le fait, si vous construisez hôte outils.Dans cet exemple particulier, la surcharge ne peut faire sens. Toutefois, il pourrait faire beaucoup de sens pour un programme ayant besoin de précision arbitraire de mathématiques.
Vous ne pouvez pas surcharger ces opérateurs dans les C.
C ne supporte pas la surcharge d'opérateur à tout.
Vous ne pouvez mettre en œuvre les opérations de fonctions:
Vous pouvez également passer à C++, mais il est peut-être exagéré pour le faire, juste pour la surcharge.
La surcharge d'opérateur n'est pas disponible dans C. au Lieu de cela, vous aurez à utiliser une fonction de "pseudo-" surcharge des opérateurs:
Si vous voulez comparable de concision, de l'utilisation de macros est la meilleure alternative:
...c'est dommage que l'utilisation de crochets n'est pas possible pour les macros!