2013-08-22 5 views
6

विविध टेम्पलेट के साथ खेलने की कोशिश कर रहा है लेकिन किसी कारण से मेरा दिमाग खराब हो गया है।वैराडिक टेम्पलेट समलिंग क्लास

मैं संकलन समय में चर को समेकित करने के लिए कक्षा बनाने की कोशिश कर रहा हूं, लेकिन रोकथाम की स्थिति को सही तरीके से नहीं बना सकता .. मैंने इसे इस तरह से करने की कोशिश की: .. लेकिन यह संकलित नहीं होता है, जल्दी से किसी की मदद करता है?

#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; 
}; 
संबंधित मुद्दे