Metaprogramação: critérios alternativos de seleção de modelo para definição de função
Esta questão explora o conceito de definição de um modelo com base na capacidade de conversão de um tipo para uma corda. O código original usa o traço do tipo is_arithmetic, mas a sugestão é usar um critério que avalie se to_string está definido para o tipo.
No entanto, o oposto deste critério, determinando quando to_string não está definido, prova desafiante. O código a seguir falha:
templateenable_if_t Para resolver isso, a resposta propõe o uso do traço de tipo void_t de Walter Brown, que permite a criação do seguinte:
template<typename T, typename = void> struct has_to_string : std::false_type { }; template<typename T> struct has_to_string<T, void_t<decltype(std::to_string(std::declval<T>()))> > : std::true_type { };Essa característica de tipo avalia efetivamente se to_string está definido para um determinado tipo, fornecendo assim um critério de seleção de modelo alternativo que se alinha com mais precisão à intenção original.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3