Recebi um std::variant
de vários tipos. Gostaria de escrever um traço que fornece outro std::variant
do ponteiro dos tipos do primeiro.
using MyVariant = std::variant<int, float>;
using MyVariantOfPointers = pointer_of_v<MyVariant>;
tal que MyVariantOfPointer
é std::variant<int*, float*>
. Eu tentei brincar com std::variant_size_v
e std::variant_alternative_t
mas não sei como construir o novo tipo recursivamente.
Você pode usar especialização parcial para escrever uma característica para resolver isso.
Uso:
Exemplo completo ( https://godbolt.org/z/qaTxo4nzc ) :
Outra solução que fornece uma solução genérica: aplicar qualquer tipo de functor em qualquer coleção de tipos:
Exemplo de uso:
Demonstração no Compiler Explorer