2013-08-22 78 views
6

试图与变异模板玩耍,但由于某种原因,我的大脑已经麻木。Variadic模板总结类

我想创建一个类来总结编译时间的变量,但不能正确地创建停止条件..我试图这样做:..但它不编译,快速帮助任何人?

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