Question

Étant donné deux boost::variant instances a et b identiques, l'expression ( a == b ) est autorisée.

Cependant, ( a != b ) ne semble pas être défini. Pourquoi est-ce?

Était-ce utile?

La solution

Je pense que ce n'est tout simplement pas ajouté à la bibliothèque. Les Boost.Operators n’aideront pas vraiment, car l’une ou l’autre variante aurait été dérivée de boost :: operator :: equal_comparable. David Pierre a raison de dire que vous pouvez l'utiliser, mais votre réponse est également correcte: le nouvel opérateur! = Ne sera pas trouvé par ADL, vous aurez donc besoin d'un opérateur utilisant.

Je demanderais ceci sur la liste de diffusion de boost-users.

Modification du commentaire de @ AFoglia:

Sept mois plus tard, j'étudie Boost.Variant et je tombe sur cette meilleure explication des listes d'omissions.

http://boost.org/Archives/boost/2006/06/ 105895.php

operator== appelle operator!= la classe actuelle de la variante. De même, appeler a!=b devrait également appeler !(a==b) de la classe. (Parce qu'en théorie, une classe peut être définie de sorte que <=> ne soit pas identique à <=>.) Cela ajouterait une autre condition selon laquelle les classes de la variante doivent avoir un <=>. (Il existe un débat sur la possibilité de formuler cette hypothèse dans le fil de discussion de la liste de diffusion.)

Autres conseils

Il s'agit de d'un lien vers la réponse de l'auteur lui-même quand cette question a été formulée sur la liste de diffusion boost

En résumé, de l'avis de l'auteur, la mise en oeuvre d'opérateurs de comparaison (! = et <) ajouterait davantage d'exigences aux types utilisés pour créer le type de variante.

Je ne partage cependant pas son point de vue, puisque! = peut être implémenté de la même manière que ==, sans masquer nécessairement les implémentations possibles de ces opérateurs pour chacun des types constituant la variante

Parce que ce n'est pas nécessaire.

Boost a une bibliothèque d'opérateurs qui définit opérateur! = en terme d'opérateur ==

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top