Por que boost :: variant não fornece operador! =
-
20-08-2019 - |
Pergunta
Dado dois casos boost::variant
idênticos a
b
( a == b )
No entanto ( a != b )
parece ser indefinido. Por que isso?
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