c++ - Check template parameter of Base class in Derived -
मेरे पास एक आधार वर्ग है जैसे
टेम्पलेट & lt; int पैरामीटर & gt; कक्षा आधार {सार्वजनिक: आभासी int getMaxParameter () = 0; } और मैंने एकाधिक व्युत्पन्न कक्षाओं में से एक को चुना जैसे
टेम्पलेट & lt; int पैरामीटर & gt; क्लास DeriveA: सार्वजनिक बेस & lt; पैरामीटर & gt; {सार्वजनिक: int getMaxParameter () {वापसी 2; }} के माध्यम से
const int p = 3; बेस & lt; p & gt; * आधार; स्विच (unreleated_input_int) {मामला 1: बेस = नया DeriveA & lt; p & gt; (); टूटना; मामला 2: बेस = नया DerivedB & lt; p & gt; (); टूटना; // ...} प्रश्न: मैं कैसे सुनिश्चित कर सकता हूं, कि बेस एंड amp के टेम्पलेट पैरामीटर; प्राप्त किए गए getMaxParameter () के बदले मूल्य से अधिक नहीं है?
मैं
DerivedA () {if (पैरामीटर> GetMaxParameter ()) // की तरह कुछ कर सकता है। ..} लेकिन मैं इसे हर व्युत्पन्न कक्षा में लिखना नहीं चाहता। क्या मैं बेस में ऐसा कुछ कर सकता हूँ? मैं शुद्ध आभासी कार्यों को कॉल नहीं कर सकता, लेकिन क्या कोई अन्य तरीका है?
मुझे आभासी फ़ंक्शन की आवश्यकता नहीं है, यह उदाहरण हो सकता है इसके बजाय व्युत्पन्न एक सदस्य चर।
यदि आप static_assert समय को संकलित करें क्योंकि आपके व्युत्पन्न वर्ग के getMaxParameter के रिटर्न मूल्य अभी तक ज्ञात नहीं हैं, आप एक कारखाना का उपयोग कर सकते हैं ... #include & lt; iostream & gt; टेम्पलेट & lt; int पैरामीटर & gt; Struct बेस {शून्य सत्यापन () {यदि (पैरामीटर & gt; यह- & gt; getMaxParameter ()) std :: cout & lt; & lt; "बड़ा \ n"; Else std :: cout & lt; & lt; "छोटे \ n"; } आभासी int getMaxParameter () = 0; }; टेम्पलेट & lt; int पैरामीटर & gt; व्युत्पन्न संरचना: सार्वजनिक बेस & lt; पैरामीटर & gt; {आभासी int getMaxParameter () {वापसी 0; }}; टेम्पलेट & lt; int पैरामीटर & gt; बेस के & lt; पैरामीटर & gt; * Make_and_verify () {बेस & lt; पैरामीटर & gt; * परिणाम = नया व्युत्पन्न & lt; पैरामीटर & gt;; result- & gt; को सत्यापित (); वापसी परिणाम; } Int main () {बेस & lt; 0 & gt; * Foo = make_and_verify & lt; 0 & gt; (); बेस के & lt; 1 & gt; * Bar = make_and_verify & lt; 1 & gt; (); वापसी 0; }
Comments
Post a Comment