मान लीजिए, मैं एक जेनेरिक लाइब्रेरी विकसित करना चाहता हूं जो संख्यात्मक प्रकारों के साथ प्रयोग योग्य होना चाहिए जिसमें डबल और उपयोगकर्ता-परिभाषित प्रकार शामिल हैं। आदिम प्रकार के लिए"जेनेरिक फ़ंक्शन" के रिटर्न प्रकार को निर्धारित करना
template<class T>
auto transmogrify(T x)
-> ???
{
using std::abs;
return abs(x)+2.0;
}
घोषणा का उपयोग कर बनाता है इस समारोह टेम्पलेट के शरीर काम: समस्या, मैं अभी का सामना करना पड़ रहा हूँ मैं बहुत इस तरह एक समारोह टेम्पलेट की वापसी प्रकार लिखने के लिए पता नहीं कैसे वह यह है कि क्योंकि उनके पास एक संबद्ध नेमस्पेस नहीं है (और इसलिए, कोई एडीएल नहीं है)। लेकिन यदि उपयोगकर्ता द्वारा परिभाषित प्रकार के लेखक अपना स्वयं का पेट फ़ंक्शन प्रदान करते हैं तो मैं विशिष्ट पेट फ़ंक्शंस का उपयोग करने के लिए ट्रांसमोग्रिफ़ाई करना चाहता हूं। मैं बस
-> decltype(abs(x)+2.0)
उपयोग नहीं कर सकते, क्योंकि इस के लिए, कहते हैं, युगल काम नहीं है, क्योंकि std :: पेट दायरे में नहीं है (जहाँ तक मैं बता सकता हूँ)। लेकिन
-> decltype(std::abs(x)+2.0)
एडीएल अक्षम कर देगा। लेकिन एडीएल को अक्षम करना एक विकल्प नहीं है। साथ ही, एक विशेष पेट फ़ंक्शन द्वारा लौटाया गया मान टाइप टी का नहीं हो सकता है लेकिन कुछ अन्य प्रकार का हो सकता है।
रिटर्न प्रकार के मुद्दे को हल करने के तरीके पर कोई विचार (ए) एडीएल रखने और (बी) किसी विशेष पेट को प्रदान करने वाले प्रकारों के लिए कुछ डिफ़ॉल्ट फ़ंक्शन (जैसे इस मामले में std :: abs) पर वापस गिरना ।
'std :: पेट का उपयोग कर #define अब; your_template_fn #undef ab' सुनिश्चित नहीं है कि –
करने के लिए यह अच्छा विकल्प है, क्या कोई ऊपर टिप्पणी कर सकता है या नहीं? –
@ श्री अनीबिस और इस परिभाषा का उपयोग करके रिटर्न प्रकार का फ़ंक्शन कैसे निर्धारित करते हैं? – ForEveR