2013-08-22 7 views
6

Provare a giocare con il modello variadico ma per qualche motivo il mio cervello è diventato insensibile.Maschera Variadic Classe di somma

Sto provando a creare una classe per sommare le variabili nel tempo di compilazione, ma non posso creare correttamente la condizione di arresto .. Ho provato ad usarlo in questo modo: .. ma non si compila, aiuto veloce a qualcuno?

#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; 
} 

risposta

7

È necessario dichiarare un modello di base per primo. Hai solo dichiarato veramente le due specializzazioni che useresti.

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; 
};