URL: https://linuxfr.org/forums/programmation-c/posts/ambig%C3%BCit%C3%A9s-entre-op%C3%A9rateurs Title: Ambigüités entre opérateurs Authors: Obsidian Date: 2004年12月07日T16:37:12+01:00 Tags: Score: 0 Bonsoir à tous. Bon, mon problème est probablement classique mais j'ai beaucoup de mal à trouver de l'aide sur ce point précis. La situation est la suivante : J'ai défini une classe qui fait à peu près le même boulot que BigInt en Java, à savoir gérer un entier sans limite de taille en mémoire (il grossit ou réadapte sa taille tout seul), plus autres _features_ locales. Evidemment, c'est une classe qui est très proche, au yeux de l'utilisateur, des types entiers natifs au compilateur tels que _int_, _long_, _short_, et consors. Il doit donc être utilisable de la même façon. Et bien sûr, on doit pouvoir l'initialiser aussi simplement que le reste : BigInt x; x = 10; Pour ce faire, j'ai défini un constructeur de BigInt pour chaque type d'entier natif (et un constructeur de copie). Par la suite, tous les autres opérateurs reçoivent exclusivement le type BigInt en argument. C'est très bien comme cela, puisque chaque fois que je rencontre un ... x + 10 ... par exemple, l'opérande est convertie dans le type de l'objet, et on travaille au même niveau. La classe est désormais pleinement fonctionnelle, sauf que j'ai besoin de pouvoir reconvertir l'objet en types natifs et là, le bas blesse parce que je suis obligé de redéfinir les opérateurs de transtypages. C'est pas un problème en soi, mais si je fais par exemple : x < 10 ... j'obtiens : _ambigous overload for 'BigInt& < int' operator candidates are: operator<(long long unsigned int,int) <built-in> operator<(long long int,int) <built-in> operator<(long int,int) <built-in> ... _ Le problème étant que dans le cas de "<", le compilateur ne l'utilise pas comme une "méthode" de BigInt (l'opérateur surchargé) mais essaie au préalable de convertir l'opérande **de gauche** (mon objet x) en utilisant les opérateurs de transtypage, pour utiliser l'opérateur externe et _built-in_ qu'il connaît. Y a-t-il moyen de demander au compilo de ne pas faire tant de zèle ? De respecter le type de la valeur de gauche ? Autrement je vais être obligé d'utiliser des méthodes style GetInt(), GetLong(), etc. pour obtenir les valeurs natives, et franchement l'objet deviendra inutilisable. Merci d'avance pour votre aide. PS: g++ v3.2.2 sur une RedHat 9.

AltStyle によって変換されたページ (->オリジナル) /