मान लीजिए मैं निम्नलिखित हस्ताक्षर के साथ एक वर्ग है:मैं वैरिएड टेम्पलेट तर्क वाले वर्ग को सक्षम कैसे करूं?
template <typename T, typename... Args>
class A;
लेकिन यह कैसे इस वर्ग के बर्ताव करता है कुछ अन्य पैरामीटर पर निर्भर होना चाहिए, मान लें कि यह T::value
का क्या महत्व है करते हैं:
template <typename T, typename... Args, typename Enable>
class A;
template <typename T, typename... Args, typename = typename std::enable_if<T::value>::type>
class A
{
// do something
};
template <typename T, typename... Args, typename = typename std::enable_if<!T::value>::type>
class A
{
// do something else
};
int main() { return 0; }
हालांकि, इस कार्यक्रम निम्नलिखित त्रुटि देता है:
prog.cpp:6:11: error: parameter pack ‘Args’ must be at the end of the template parameter list class A;
मैंनेके उपयोग पर जानकारी का एक अच्छा स्रोत खोजने के लिए संघर्ष किया है विविधता टेम्पलेट्स के साथ कक्षाओं का चयन करने के लिए। केवल सवाल मैं मिल सकता है इस एक है:
How to use std::enable_if with variadic template
लेकिन नाम के बावजूद, इस सवाल और उसके जवाब ज्यादा मदद नहीं कर रहे हैं। अगर कोई इस बात पर एक गाइड प्रदान या लिंक कर सकता है कि इसका संपर्क कैसे किया जाना चाहिए और इसकी सराहना क्यों की जाएगी।
मैंने 'ए ए 'घोषित करने का प्रयास किया, लेकिन संकलक ने मुझे बताया:" अपरिभाषित टेम्पलेट का निहित तत्काल विस्तार :: A_impl '। अगर आप इसे थोड़ा सा समझा सकते हैं तो मैं इसकी बहुत सराहना करता हूं। (क्षमा करें, मैं अभी भी इन चीजों को सीख रहा हूं) –
astroboylrx
@astroboylrx इसके लिए काम करने वाला पहला 'ए' की टेम्पलेट पैरामीटर सूची में टाइप करें' मान 'सदस्य होने की आवश्यकता है, क्योंकि 'enable_if' में चेक इस पर निर्भर करता है। आपने इसके बजाय' float' का उपयोग किया है। 'value' सदस्य के बिना,' enable_if' में चेक अमान्य हैं, इसलिए 'A_impl' का प्राथमिक टेम्पलेट (इसमें कोई कार्यान्वयन नहीं है, इसे केवल घोषित किया गया है) चुना जाता है और आपको त्रुटि मिलती है। – jrok
मेरे देर के उत्तर के लिए खेद है। इस स्पष्टीकरण के लिए धन्यवाद। मुझे अब दिख रहा है। :-) – astroboylrx