tag poner pagina name keywords description content colocar bloginfo añadir agregar c++ templates

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!