का उपयोग मैं सी ++ में दो आदिम प्रकारों को सही पदोन्नति प्रकार निर्धारित करने के लिए टेम्पलेट्स के एक सेट के साथ खेल रहा हूं। विचार यह है कि यदि आप एक कस्टम संख्यात्मक टेम्पलेट को परिभाषित करते हैं, तो आप टेम्पलेट्स को पारित कक्षा के आधार पर ऑपरेटर + फ़ंक्शन का रिटर्न प्रकार निर्धारित करने के लिए इनका उपयोग कर सकते हैं। उदाहरण के लिए:सी ++ अंकगणितीय संवर्धन शीर्षलेख
// Custom numeric class
template <class T>
struct Complex {
Complex(T real, T imag) : r(real), i(imag) {}
T r, i;
// Other implementation stuff
};
// Generic arithmetic promotion template
template <class T, class U>
struct ArithmeticPromotion {
typedef typename X type; // I realize this is incorrect, but the point is it would
// figure out what X would be via trait testing, etc
};
// Specialization of arithmetic promotion template
template <>
class ArithmeticPromotion<long long, unsigned long> {
typedef typename unsigned long long type;
}
// Arithmetic promotion template actually being used
template <class T, class U>
Complex<typename ArithmeticPromotion<T, U>::type>
operator+ (Complex<T>& lhs, Complex<U>& rhs) {
return Complex<typename ArithmeticPromotion<T, U>::type>(lhs.r + rhs.r, lhs.i + rhs.i);
}
आप इन पदोन्नति टेम्पलेट का उपयोग करते हैं, तो आप कम या ज्यादा अपने उपयोगकर्ता परिभाषित प्रकार के रूप में यदि वे एक ही पदोन्नति नियमों उन्हें लागू किया जा रहा के साथ पुरातन रहे इलाज कर सकते हैं। तो, मुझे लगता है कि मेरे पास यह सवाल है क्या यह ऐसा कुछ होगा जो उपयोगी हो सकता है? और यदि हां, तो उपयोग की आसानी के लिए आप किस प्रकार के सामान्य कार्यों को दूर करना चाहते हैं? मैं इस धारणा पर काम कर रहा हूं कि अकेले पदोन्नति टेम्पलेट्स व्यावहारिक गोद लेने के लिए अपर्याप्त होंगे।
संयोग से, बूस्ट के गणित/उपकरण/पदोन्नति शीर्षलेख में कुछ समान है, लेकिन मानक सी गणित कार्यों (जो कि 2 इंच या 2 युगल की अपेक्षा करता है) को पारित करने के लिए मूल्यों को प्राप्त करने के लिए वास्तव में अधिक है और सभी को छोड़ देता है अभिन्न प्रकार। क्या ऐसी चीज है जो आपके ऑब्जेक्ट्स को परिवर्तित करने के तरीके पर पूर्ण नियंत्रण रखने के लिए बेहतर है?
टीएल; डीआर: आप किस तरह के सहायक टेम्पलेट्स को गणित के बाहर एक अंकगणितीय पदोन्नति शीर्षलेख में ढूंढने की उम्मीद करेंगे जो पदोन्नति करता है?
मुझे लगता है कि आप अंत में कुछ चर (विभिन्न प्रकार के) के लिए अच्छी तरह से प्रचारित परिणाम असाइन करने जा रहे हैं, इसलिए मैं इसके लिए अधिक व्यावहारिक उपयोग नहीं देख सकता। शायद सी ++ 0x में ** ऑटो ** के साथ, लेकिन फिर भी मुझे लगता है कि ** decltype ** अधिकतर नौकरी का अधिक आसानी से ख्याल रख सकता है। यह पता चला है – UncleBens
रूप में, यह CommonType struct, जो decltype का लाभ उठाता है सही प्रकार यह पता लगाने की के रूप में C++ 0x में लागू किया जाएगा। यदि कोई पदोन्नति/रूपांतरण के मानक के नियमों के संबंध में पूरी तरह से समान व्यवहार चाहता है, तो उन्हें केवल टेम्पलेट्स की कम्यूटिव विविधताओं को लिखना होगा। – BenTrofatter