Pregunta

Intenté usar un conjunto de funciones de filtro para ejecutar la rutina apropiada, basada en una entrada de cadena. Traté de crear funciones de coincidencia para casos comunes usando plantillas, pero obtengo un & Quot; tipo no es igual a tipo & Quot; error cuando intento almacenar un puntero a la función especializada (en una estructura, en la aplicación real)

Ejemplo destilado de una 'aplicación de consola' de Visual C ++ 8

template <const char *C>
const char*
f(void) {
  return C;
}

const char* (*g)(void) = f<"hi">;


int _tmain(int argc, _TCHAR* argv[])
{
  return g();
}

Esto falla con el error

Error   1   error C2440: 'initializing' : cannot convert from 'const char *(__cdecl *)(void)' to 'const char *(__cdecl *)(void)'    c:\files\pointer.cpp    7   

(También tiene un error en el valor de retorno principal, pero eso no me concierne aquí.)

El mismo ejemplo sucede si const char * se reemplaza por int.

¿Fue útil?

Solución

Las cadenas como parámetros de valor de plantilla están prohibidas por el estándar ISO.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top