मान लीजिए कि मैं सीमा को लागू करना चाहता हूं कि टेम्पलेट पैरामीटर फू में एक बच्चा है।टेम्पलेट पैरामीटर पर बाल-एक्स-एक्स सीमा को कैसे लागू करें?
वहाँ प्रकार- लक्षण के माध्यम से इस लागू करने के लिए कोई तरीका है? एक संकलन-समय static_assert
विफलता बहुत अच्छी होगी।
नीचे दिए गए कोड में, आइए इसे दो भाग (अलग) प्रश्न बनाएं।
- संकलन के लिए केवल
My_Limited_Template<Bar>
को अनुमति दें। - संकलन के लिए केवल
My_Limited_Template<TBar>
को अनुमति दें।
संपादित मुझे बुरा नामकरण के लिए माफी माँगता हूँ: TBar
और TBaz
उद्देश्यों पर गैर टेम्पलेट वर्गों के लिए हैं। मैं सिर्फ भाग में नाम वर्गों से स्पष्ट करने के लिए के सामने टी संलग्न 1.
कोड
struct Foo { }; // no
struct Bar : public Foo { }; // yes
struct Baz { }; // no
template< typename T >
struct TFoo { }; // no
struct TBar : public TFoo<TBar> { }; // yes
struct TBaz { }; // no
template< typename T >
struct My_Limited_Template
{
// Part One:
// My_Limited_Template<Foo> // disallow
// My_Limited_Template<Bar> // allow
// My_Limited_Template<Baz> // disallow
//
// Part Two:
// My_Limited_Template<TFoo<int>> // disallow
// My_Limited_Template<TBar> // allow
// My_Limited_Template<TBaz> // disallow
};
तो दूसरा भाग * "केवल पैरामीटर को अनुमति देगा जो सीआरटीपी का उपयोग कर टीएफयू से प्राप्त किए गए हैं" *? – jrok
@jrok +1 यदि आप सीआरटीपी शामिल कर सकते हैं, तो यह भी बेहतर होगा, लेकिन मुझे यकीन नहीं है कि यह संभव है! – kfmfe04
मेरा मतलब यह था कि ** आपने ** टीबीआर प्राप्त करते समय सीआरटीपी का इस्तेमाल किया था। क्या यह एकमात्र प्रकार का 'टीएफयू' बच्चा है जिसे आप अनुमति देना चाहते हैं या क्या यह 'स्ट्रक्चर एक्स: टीएफयू {};' जैसे कुछ होना ठीक है? –
jrok