www versiones stands que org lenguajes language for extensible basados c++ boost-variant

c++ - versiones - xml stands for



¿Por qué boost:: variant no proporciona operador!= (3)

Dadas dos instancias de boost::variant idénticas a y b , la expresión ( a == b ) está permitida.

Sin embargo ( a != b ) parece estar indefinido. ¿Por qué es esto?


Creo que simplemente no se ha añadido a la biblioteca. Los operadores Boost.Operators realmente no ayudarán, porque cualquiera de las variantes se habría derivado de boost :: operator :: equality_comparable. David Pierre tiene razón al decir que puede usar eso, pero su respuesta también es correcta, que ADL no podrá encontrar al nuevo operador, por lo que necesitará un operador que lo use.

Pediría esto en la lista de correo de usuarios de impulso.

Editar desde el comentario de @Afoglia:

Siete meses más tarde, y estoy estudiando Boost.Variant, y me tropiezo con esta mejor explicación de las listas de omisiones.

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

operator== llama a operator== para la clase real actualmente en la variante. Del mismo modo, llamar al operator!= También debe llamar al operator!= la clase. (Debido a que, en teoría, una clase puede definirse de modo que a!=b no sea lo mismo que !(a==b) .) Así que eso agregaría otro requisito de que las clases en la variante tengan un operator!= . (Existe un debate sobre si puede hacer esta suposición en el hilo de la lista de correo).


Este es lists.boost.org/Archives/boost/2006/06/105895.php cuando esta pregunta se formuló en la lista de correo de boost

Resumiéndolo, en la opinión del autor, la implementación de operadores de comparación (! = Y <) agregaría más requisitos en los tipos utilizados para crear el tipo de variante.

Sin embargo, no estoy de acuerdo con su punto de vista, ya que! = Se puede implementar de la misma manera que ==, sin ocultar necesariamente las posibles implementaciones de estos operadores para cada uno de los tipos que componen la variante