Selecionando uma função de membro usando diferentes condições enable_if
A metafunção enable_if é utilizada para especificar parâmetros de função de modelo e selecionar funções de membro apropriadas com base neles . Considere o seguinte código:
template
struct Point
{
// Check if T is int and call MyFunction for int
void MyFunction(typename std::enable_if<:is_same int>::value, T &>::type* = 0)
{
std::cout ::value, float &>::type* = 0)
{
std::cout No entanto, este código pode causar erros do compilador indicando que "nenhum tipo chamado 'type' em 'struct std::enable_if'".
Entendendo enable_if
enable_if garante que apenas sobrecargas de funções viáveis sejam consideradas durante a resolução de sobrecarga. Se uma substituição de argumento de modelo falhar, essa sobrecarga será removida do conjunto de candidatos.
No exemplo acima, o argumento de modelo T já é conhecido ao instanciar as funções de membro. Para implementar o comportamento desejado, podemos criar um argumento de modelo fictício padronizado como T e executar SFINAE usando-o:
template
struct Point
{
template
typename std::enable_if<:is_same int>::value>::type
MyFunction()
{
std::cout
typename std::enable_if<:is_same float>::value>::type
MyFunction()
{
std::cout
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