17 Mart 2020 Salı

std::holds_alternative - variant'ın Belirtilen Tipi İçerip İçermediğini Döner

Giriş
Açıklaması şöyle.
With std::holds_alternative you can ask which type was stored in the variant
Örnek
Şöyle yaparız.
struct A{};
struct B{};


std::variant < A,B > Func( int x)
{
    if ( x == 0 ) return A{};
    return B{};
}

int main()
{
    auto v = Func( 0 );
    if ( std::holds_alternative<A>(v) )
    {
        std::cout << "A" << std::endl;
    }
    else if ( std::holds_alternative<B>(v) )
    {
        std::cout << "B" << std::endl;
    }

    // or even use std::visit or whatever is helpful...
}
Örnek
Şöyle yaparız.
template<typename... Alts, typename... Ts>
constexpr bool holds_any_of(std::variant<Ts...> const& v) noexcept {
  return (std::holds_alternative<Alts>(v) || ...);
}

Hiç yorum yok:

Yorum Gönder