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)?