2014-06-30 4 views
6

मुझे लगता है यह लोग हैं, जो जानते हैं कि टेम्पलेट्स के लिए तुच्छ है ...अलग वर्ग कार्यान्वयन

मान लीजिए हम इस टेम्पलेट वर्ग के दो विभिन्न कार्यान्वयन चाहते हैं, एन के मूल्य के आधार:

template <int N> 
class Foo { 
    ... 
}; 

उदाहरण के लिए:

template <int N> 
class Foo { 
    ... // implementation for N <= 10 
}; 

template <int N> 
class Foo { 
    ... // implementation for N > 10 
}; 

हम कैसे कर सकते हैं कि C++ 11?

उत्तर

19

मामलों भेद करने के लिए एक डिफ़ॉल्ट मान के साथ एक अतिरिक्त टेम्पलेट पैरामीटर का उपयोग करें:

template <int N, bool b = N <= 10> 
class Foo; 

template <int N> 
class Foo<N, true> { 
    ... // implementation for N <= 10 
}; 

template <int N> 
class Foo<N, false> { 
    ... // implementation for N > 10 
}; 
+0

है यही कारण है कि एक चतुर विचार –

+1

एक 'std :: सशर्त <एन <= 10, FooBaseLess , FooBaseMore > :: प्रकार का उपयोग करना एक आधार वर्ग के रूप में भी काम करेगा। लेकिन यह बहुत साफ है, +1। – Niall

+1

इसके लिए धन्यवाद: 1. संक्षेप में और बहुत उपयोगी रूप से जवाब देना, 2. नहीं पूछना "आप ऐसा क्यों करना चाहते हैं?"। – user1387866

संबंधित मुद्दे