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

Przeciążenie szablonów

Object Storage Arubacloud
0 głosów
140 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 (344,860 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ź 241 wizyt
0 głosów
1 odpowiedź 613 wizyt
pytanie zadane 3 listopada 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 720 wizyt
pytanie zadane 5 sierpnia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...