(Jestem przy założeniu znajomości Abrahams/Dimov example w tej kwestii).Funkcja specjalizacja szablonu i przykład Abrahams/Dimov
Załóżmy, że jest jakiś kod 3rd-Party w nagłówku, że podoba Ci się to, co nie można modyfikować:
template<class T> void f(T); // (1) base template 1
template<class T> void f(T *); // (2) base template 2
template<> void f<>(int *); // (3) specialization of (2)
pytanie brzmi:
Gdybym nadano deklaracje powyżej jak jest to możliwe mi teraz specjalizować szablon Podstawa 1 dla przypadku gdy T = int *
(na przykład)?
Czy sama deklaracja wzoru podstawowego 2 oznacza, że szablon podstawowy 1 nie może być wyspecjalizowany (przynajmniej dla wskaźników)?
Nawet gdybyś mógł, czy ta specjalizacja byłaby na żądanie? Wygląda na to, że szablon podstawowy 2 zawsze "wygrał", gdyby wywołano f za pomocą wskaźnika. – Mat
@Mat: Nie w obecnej jednostce tłumaczeniowej, o ile widzę, ale można by ją wywołać z innej jednostki tłumaczeniowej, tak myślę, prawda? Zakładając, że druga jednostka tłumaczeniowa ma nieprzeładowaną deklarację nr 1 i odpowiadającej jej specjalizacji. – Mehrdad
Jednostka tłumaczeniowa, która nie ma szablonu podstawowego 2 w zakresie? (Nie jestem pewien, czy rozumiem.) Strzeżcie się również naruszeń ODR. – Mat