Como tomar um ponteiro para uma função de modelo especializado em uma corda?
-
20-08-2019 - |
Pergunta
Eu estava tentando usar um conjunto de funções de filtro para executar a rotina apropriada, com base em uma entrada de string. Tentei criar funções matcher para casos comuns usando modelos, mas eu recebo um "tipo não igualar a digitar" erro ao tentar armazenar um ponteiro para a função especializada (em uma estrutura, na aplicação real)
destilada exemplo de um Visual C ++ 8 'aplicação de consola'
template <const char *C>
const char*
f(void) {
return C;
}
const char* (*g)(void) = f<"hi">;
int _tmain(int argc, _TCHAR* argv[])
{
return g();
}
Esta falha com o erro
Error 1 error C2440: 'initializing' : cannot convert from 'const char *(__cdecl *)(void)' to 'const char *(__cdecl *)(void)' c:\files\pointer.cpp 7
(Ele também tem um erro no valor de retorno principal, mas isso não me diz respeito aqui.)
O mesmo exemplo succedes se const char *
é substituído por int.
Solução
Strings como parâmetros do modelo de valor são proibidos pela norma ISO.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow