Função especialização modelo com referência ao ponteiro
-
18-09-2019 - |
Pergunta
Eu tenho uma função de modelo:
template<typename T>
void foo(const T& value) { bar(value); x = -1; }
Eu quero especializar-lo para um conjunto de tipos:
template<>
void foo<char>(const char& value) { bar(value); x = 0; }
template<>
void foo<unsigned char>(const unsigned char& value) { bar(value); x = 1; }
Ele funciona ok. Quando eu compilar este:
template<>
void foo<char*>(const char*& value) { bar(value); x = 2; }
Eu recebo um erro:
error C2912: explicit specialization; 'void foo(const char *&)' is not a specialization of a function template
É possível se especializar com o parâmetro char*
tipo de ponteiro sem typedef'ing-lo?
Solução
Claro. Tente isto:
template<>
void foo<char*>(char* const& value) {...}
Isto é porque os meios const char*
ponteiro para const char
, não um ponteiro const
para char
.
Outras dicas
Geralmente, você deve apenas evitar especializações modelo de função: você terá muito menos problemas se você fornecer sobrecargas não-modelo em seu lugar. Leia mais: Por que se especializam modelos de função
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow