• 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
135 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,100 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ź 232 wizyt
0 głosów
1 odpowiedź 598 wizyt
pytanie zadane 3 listopada 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
1 odpowiedź 696 wizyt
pytanie zadane 5 sierpnia 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...