2013-08-22 19 views
6

Próbujesz bawić się szablonem variadic, ale z jakiegoś powodu mój mózg stał się odrętwiały.Szablon Variadic Klasa podsumowująca

Próbuję utworzyć klasę, aby podsumować zmienne w czasie kompilacji, ale nie mogę poprawnie utworzyć warunku zatrzymania. Próbowałem to tak: .. ale nie kompiluje, szybka pomoc komukolwiek?

#include <iostream> 
#include <type_traits> 
using namespace std; 


template<size_t Head, size_t ...Rest> 
struct Sum 
{ 
    static const size_t value = Head + Sum<Rest...>::value; 
    static void Print() {  
     cout << value; 
    } 
}; 

template<> 
struct Sum 
{ 
    static const size_t value = 0; 
}; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    Sum<5,5,5>::Print(); 
    return 0; 
} 

Odpowiedz

7

Najpierw należy zadeklarować szablon podstawowy. Naprawdę zadeklarowałeś tylko dwie specjalizacje, których używałbyś.

template<size_t...> struct Sum; 

template<size_t Head, size_t ...Rest> 
struct Sum<Head, Rest...> 
{ 
    static const size_t value = Head + Sum<Rest...>::value; 
    static void Print() {  
     cout << value; 
    } 
}; 

template<> 
struct Sum<> 
{ 
    static const size_t value = 0; 
};