Witam.
Natknąłem się ostatnio w książce na określenie specjalizacja jawna, które było używane zamiennie z określeniem specjalizowana definicja szablonu (bo chodzi tu konkretnie o dział szablony funkcji).
Specjalizacja jawna używana jest, gdy szablon funkcji nie nadaje się do wygenerowania tej funkcji dla jakiegoś konkretnego typu. A wygląda ona tak:
template <typename T> void fun(T a)
{
// Szablon funkcji...
}
template <> void fun<char>(char a)
// lub template <> void fun(char a)
{
// Specjalizacja jawna (specjalizowana definicja szablonu dla typu char)
}
Na wykładach jednak miałem określenie specjalizacji funkcji, i działa ono (przynajmniej na pierwszy rzut oka) tak samo jak specjalizacja definicji szablonu.
template <typename T> void fun(T a)
{
// Szablon funkcji...
}
void fun(char a)
{
// Specjalizacja funkcji..
}
Ktoś mógłby wyjaśnić na czym polegają różnice między specjalizacją funkcji a specjalizacją jawną (definicji szablonu)?