• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przeciążenie szablonów

VPS Starter Arubacloud
0 głosów
169 wizyt
pytanie zadane 17 marca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

Witam !

Chciałem stworzyć program wykorzystujący szablon oraz specjalizacje (prawidłowo) tak, aby kompilator się pogubił i pokazał błąd. Oczywiście nie było to trudne, jednak w momencie próby rozwiązania takiego problemu i doprowadzenia do aktywacji programu (dodałem tablice wskaźników) nie wiem czy kompilator dalej się gubi czy ja gdzieś popełniłem błąd.

#include <iostream>
template <typename T>
void fun (T arr[], int n); // szablon #1

template <> void fun <> (double * arr[] , int n, int suma = 0); // szablon #2 (specjalizacja)
int main()
{
        double tab[3] = {13.55, 25.11, 343.2};
        double * wsk[3];
        for(int i=0; i<3; i++)
                wsk[i] = &tab[i];

        std::cout << "\tTablica wartosci\n";
        fun(tab, 3); // szablon #1

        std::cout << "\n\tProba wywolania\n";
        fun(wsk, 3);

        return 0;
}

template <typename T>
void fun (T arr[], int n)
{
        for(int i=0; i<n; i++)
                std::cout << arr[i] << std::endl;
}

template <> void fun <> (double * arr[], int n, int suma = 0)
{
        std::cout << "SPECJALIZACJA !" << std:: endl;
        for (int i=0; i<n; i++)
                suma += *arr[i];
        std::cout << "Suma wszystkich wartosci tablicy: "<< suma << std::endl;
}

Proszę o pomoc.

1 odpowiedź

+2 głosów
odpowiedź 17 marca 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)
wybrane 17 marca 2018 przez Sic
 
Najlepsza
template <> void fun <> (double * arr[] , int n, int suma = 0);

To nie jest specjalizacja tego pierwszego szablonu. Przecież te dwie funkcję przyjmują różną ilość argumentów.

2
komentarz 17 marca 2018 przez adrian17 Ekspert (349,960 p.)
Plus, ogólnie specjalizacje i argumenty z wartościami domyślnymi za bardzo się nie lubią.
komentarz 17 marca 2018 przez Sic Dyskutant (8,510 p.)

Dziękuję wyrównanie ilości argumentów pomogło.

Jednak mam pytanie do:

Plus, ogólnie specjalizacje i argumenty z wartościami domyślnymi za bardzo się nie lubią.

Dlaczego ?

komentarz 17 marca 2018 przez Qwerty96 Stary wyjadacz (13,580 p.)

http://en.cppreference.com/w/cpp/language/template_specialization#Explicit_specializations_of_function_templates

Default function arguments cannot be specified in explicit specializations of function templates, member function templates, and member functions of class templates when the class is implicitly instantiated.

Podobne pytania

0 głosów
1 odpowiedź 251 wizyt
0 głosów
1 odpowiedź 895 wizyt
pytanie zadane 3 listopada 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 875 wizyt
pytanie zadane 5 sierpnia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

93,023 zapytań

141,986 odpowiedzi

321,290 komentarzy

62,370 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...