2013-08-22 4 views
6

Попытка поиграть с вариационным шаблоном, но почему-то мой мозг онемел.Variadic template Summing class

Я пытаюсь создать класс для суммирования переменных во время компиляции, но не могу корректно создать условие остановки. Я попытался это сделать следующим образом: .. но он не компилируется, не помогает никому?

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

ответ

7

Сначала необходимо сначала создать базовый шаблон. Вы только что объявили две специализации, которые вы использовали бы.

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; 
}; 
Смежные вопросы