le compilo génère le code des opérateurs si des méthodes pré-définies existent déjà
J'ai peur que ça soit super complexe si tu veux un truc cohérent. Par exemple, si tu définis < et >, tu pourrais générer automatiquement tous les opérateurs de comparaison, mais c'est super dangereux, parce que si tu t'es foiré et que tu peux parfois être à la fois < et >, toute la série devient incohérente, et j'ai du mal à imaginer comment le comportement pourrait être défini (à moins de définir hyper strictement la logique que devrait suivre le compilo dans tous les cas de figure (si tu fournis < et >, si tu fournis == et >, si tu fournis <= et !=, etc). ).
En fait, ce qu'il manque pour en arriver là, c'est probablement d'associer une sémantique forte avec les opérateurs. La surcharge d'opérateurs te permet de faire n'importe quoi, l'opérateur est juste un nom de méthode presque comme un autre. Si tu définis que par défaut, ++ est équivalent à += 1; que *= x est équivalent à /= (1/x); tu imposes une sémantique, et ça n'a pas de limite (on pourrait aussi imposer qu'une méthode size() revoie un site_t...). Si ça ne tenait qu'à moi, ça ne me poserait pas de problème, mais je ne pense pas que ça soit comme ça que la surcharge d'opérateurs a été concue...
[^] # Re: Namespace bits ?
Posté par arnaudus . En réponse au journal Jouons avec le ``switch`` et C++17. Évalué à 3.
J'ai peur que ça soit super complexe si tu veux un truc cohérent. Par exemple, si tu définis < et >, tu pourrais générer automatiquement tous les opérateurs de comparaison, mais c'est super dangereux, parce que si tu t'es foiré et que tu peux parfois être à la fois < et >, toute la série devient incohérente, et j'ai du mal à imaginer comment le comportement pourrait être défini (à moins de définir hyper strictement la logique que devrait suivre le compilo dans tous les cas de figure (si tu fournis < et >, si tu fournis == et >, si tu fournis <= et !=, etc). ).
En fait, ce qu'il manque pour en arriver là, c'est probablement d'associer une sémantique forte avec les opérateurs. La surcharge d'opérateurs te permet de faire n'importe quoi, l'opérateur est juste un nom de méthode presque comme un autre. Si tu définis que par défaut, ++ est équivalent à += 1; que *= x est équivalent à /= (1/x); tu imposes une sémantique, et ça n'a pas de limite (on pourrait aussi imposer qu'une méthode size() revoie un site_t...). Si ça ne tenait qu'à moi, ça ne me poserait pas de problème, mais je ne pense pas que ça soit comme ça que la surcharge d'opérateurs a été concue...