c++ - poner - meta name keywords content wordpress
¿Cómo instalo explícitamente una función de plantilla? (2)
Tu código es correcto
El mensaje de error se refiere a un lugar en el código que no citó aquí.
Actualizar:
El código original era
template <class T> int function_name(T a) {}
template int function_name<int>(int);
y fue correcto
Pero no fue citado y por lo tanto se veía así:
template int function_name(T a) {}
template int function_name(int);
Genera el siguiente error
a.cpp:1: error: explicit instantiation of non-template ‘int function_name’
a.cpp:1: error: expected `;'' before ‘(’ token
a.cpp:3: error: ‘function_name’ is not a template function
que es claramente diferente de lo que OP citó.
En esta variante, la segunda línea está bien ( <int>
se puede omitir aquí), pero la primera línea es defectuosa. El compilador no puede adivinar que T
es un parámetro de plantilla.
Tengo una función de plantilla con un argumento. Tengo que crear una instancia de esa función sin llamar a esa función significa explícitamente que tengo que crear una instancia.
Tengo esta función:
template <class T> int function_name(T a) {}
Instalé esa función de esta manera:
template int function_name<int>(int);
Pero tengo los siguientes errores:
error: expected primary-expression before ''template''
error: expected `;'' before ''template''
[EDIT 2]: tenga en cuenta que hubo cierta confusión con respecto al código en la pregunta original debido a problemas de formato del código. Ver la respuesta de AnthonyHatchkins para más detalles.
Si realmente desea instanciar (en lugar de especializar o algo) la función, haga esto:
template <typename T> void func(T param) {} // definition
template void func<int>(int param); // explicit instantiation.
[EDITAR] Parece haber (mucha) confusión con respecto a ejemplificación explícita y especialización. El código que publiqué anteriormente se refiere a la instanciación explícita . La sintaxis para la especialización es diferente. Aquí está la sintaxis para la especialización:
template <typename T> void func(T param) {} // definition
template <> void func<int>(int param) {} // specialization
Tenga en cuenta que los corchetes angulares después de la plantilla!