2013-08-22 28 views
6

Değişken bir şablonla etrafta oynamaya çalışıyorum ama nedense beynim uyuşmuş.Variadic template Toplama sınıfı

Derleme zamanında değişkenleri toplamak için bir sınıf oluşturmaya çalışıyorum, ancak durdurma koşullarını doğru şekilde oluşturamıyorum. Bunu şu şekilde denedim: .. ama derleme yapmıyor, kimseye hızlı yardım etmiyor mu?

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

cevap

7

Önce bir temel şablon bildirmeniz gerekiyor. Sadece kullanacağınız iki uzmanlığı gerçekten ilan ettiniz.

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; 
}; 
İlgili konular