Pergunta

Dado dois casos boost::variant idênticos a e b , a expressão ( a == b ) é permitida.

No entanto ( a != b ) parece ser indefinido. Por que isso?

Foi útil?

Solução

Eu acho que não é só adicionado à biblioteca. Os Boost.Operators não irão realmente ajudar, porque ou variante teria sido derivada de boost :: operador :: equality_comparable. David Pierre é certo dizer que você pode usar isso, mas a sua resposta está correta também, que o novo operador! = Não será encontrado pela ADL, então você precisará de um operador usando.

Eu pediria esta na lista de impulsionar-users.

Editar @ comentário de AFoglia:

Sete meses mais tarde, e eu estou estudando Boost.Variant, e eu tropeçar sobre esta explicação melhor das listas de omissão.

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

operator== chama operator== para a classe real atualmente na variante. Da mesma forma chamando operator!= também deve chamar operator!= da classe. (Porque, teoricamente, uma classe pode ser definida de modo a!=b não é o mesmo que !(a==b).) Assim que adicionar uma outra exigência de que as classes na variante têm um operator!=. (Há um debate sobre se você pode fazer essa suposição no segmento de lista de discussão.)

Outras dicas

Esta é um link para a resposta do próprio autor quando esta pergunta foi formulada na lista impulso de discussão

Resumindo que, na opinião autor, a implementação de operadores de comparação (! = E <) gostaria de acrescentar mais exigências sobre os tipos usados ??para criar o tipo de variante.

Eu não concordo com seu ponto de vista, porém, desde! = Pode ser implementada da mesma forma como ==, sem necessariamente esconder as possíveis implementações destes operadores para cada um dos tipos que compõem a variante

Porque ele não precisa.

Impulso tem uma href="http://www.boost.org/doc/libs/1_39_0/libs/utility/operators.htm" rel="nofollow noreferrer"> operadores

scroll top