cpp::daily - Conceitos e Exemplos sobre: std::less_equal, std::variant e std::visit

C++ Diário - Episódio 010 .


std less equal variant visit

No capítulo anterior vimos conceitos de std::sort e std::greater . Vamos trabalhar aquele exemplo do std::sort que usamos sem o terceiro parâmetro com std::less_equal para obtermos um array em ordem crescente.

  • O std::less_equals é uma classe de objeto de função usada para realizar comparações. É definido como uma classe de objeto de função para comparação inferior a igualdade que retorna um valor booleano dependendo da condição.

Ou seja, basta usar o mesmo exemplo para ordenarmos de forma crescente:

Exemplo:

#include <iostream>
#include <algorithm>

int main(){
    int array[] = {11, 2, 9, 17, 12, 89, 13, 2, 52, 8, 4, 79},
          length = sizeof( array ) / sizeof( array[0] );

    std::sort( array, array + length, std::less_equal<int>() );

    for ( auto nums : array ) {
      std::cout << nums << ' ';
    }
    std::cout << '\n';

    return 0;
}

Saída: 2 4 8 9 11 12 13 17 52 79 89

Simples de entender, né?! Ou seja coloca em ordem do menor ou igual


std::variant e std::visit

O std::variant é como o próprio nome supõe, o tipo pode variar, não é igual à usar auto(precisa inicializar e não é possível alterar o tipo). Ou seja, com std::variant você pode dizer que a variável var poder ser: int, std::string, char *,…

Já o std::visit é a forma que vamos manipular esse dado entregue pela std::variant, ou seja, quando você cria uma função ela tem um tipo de retorno, logo, o std::visit quase a mesma ideia diretamente ligada ao polimosfismo. Ela é geralmente usada em conjunto com expressões lambda .

Exemplo: Criar uma variável e passar o valor dela para uma função, nesse caso: lambda.

#include <iostream>
#include <variant> // para usar o std::variant

int main(){
  std::variant<int, std::string, char *> var;

  var = "Eu sou uma string!";

  std::visit( []( auto &e ) {
      std::cout << e << '\n';
      }, var );

  var = 936;

  visit( []( auto &e ) {
      std::cout << e << '\n';
      }, var );

  var = "Agora eu sou um char ponteiro.";

  visit( []( auto &e ) {
      std::cout << e << '\n';
      }, var );

  return 0;
}

Algumas coisas para analisar no código acima:

  • Necessário incluir a lib variant: std::variant;
  • Escolhi 3 tipos diferente para minha variável var: int, std::string e char *;
  • A resolução de escopo em std::visit pode ser opcional: ora usei: std::visit e outrora somente: visit;
  • E por último, você só conseguirá compilar esse código com C++17.

Bom, para uma análise rápida e de fácil compreensão é isso! Caso queira se aprofundar ainda mais sugiro esses links: std::less_equal, std::variant e std::visit .

Por hoje é só, são pequenas doses diárias que farão sempre nos manter antenado com o C++ !

Acompanhe o cpp::daily


cppdaily


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo


Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!