char (&f(...))[2];
यह दो वर्णों की एक सरणी के संदर्भ को वापस करने वाले फ़ंक्शन की घोषणा है। इसके लिए वाक्य रचनात्मक रूप से सही होने के लिए कोष्ठक की आवश्यकता होती है। अन्यथा &
char
से जुड़ जाएगा और [2]
की अर्थहीन होने के कारण एक वाक्यविन्यास त्रुटि होगी।
वाक्यविन्यास को एक प्रकार के उपनाम के साथ विघटित किया जा सकता है। उदाहरण के लिए:
using array_ref = char (&)[2];
array_ref f(...);
एक वास्तविक सरणी एक सरणी के बजाय के लिए एक संदर्भ लौटने के लिए कारण है, क्योंकि तथ्य यह है कि सरणियों कार्यों से वापस नहीं किया जा सकता है की है। यह नामुमकिन है। आप केवल कार्यों की तरह, सरणी या पॉइंटर्स को सरणी में वापस कर सकते हैं।
सभी उदाहरणों में, ...
एक सी variadic argument pack है।
केवल स्थानों पर जहां मैं वाक्य रचना के इस प्रकार देखा है जहां यह SFINAE के लिए समारोह अधिभार संकल्प के हिस्से के रूप में इस्तेमाल किया जा रहा है है। आम तौर पर यह फ़ंक्शन उसी नाम के अधिभार के साथ होता है जो किसी दिए गए प्रकार की विशेषता को देखने के लिए टेम्पलेट प्रतिस्थापन का उपयोग करता है।यदि प्रतिस्थापन विफलता दूसरी अधिभार (जो एक वैरैडिक पैक लेता है) को फॉलबैक के रूप में चुना जाता है। इसका रिटर्न प्रकार सफलता या विफलता को अलग करता है।
उदाहरण के लिए, यहाँ विशेषता वर्ग की जाँच करता है कि एक प्रकार एक सदस्य समारोह f()
है अगर है:
template <typename T>
struct has_f
{
private:
using true_type = char (&)[1];
using false_type = char (&)[2];
template <typename U>
static decltype(std::declval<U>().f(), true_type()) f(int);
template <typename>
static false_type f(...);
public:
static constexpr bool value = sizeof(check<T>(0)) == 1;
};
आप देख सकते हैं, अगर T
एक सदस्य समारोह f()
है, तो प्रकार लौटाया के आकार हो जाएगा 1
, अन्यथा 2
। true_type
और false_type
इन दिनों मानक गुण कक्षा std::true_type
और std::false_type
द्वारा बड़े पैमाने पर अधिलेखित किए जाते हैं, लेकिन यह इसका उपयोग उदाहरण के लिए एक उदाहरण है।
कृपया पूरा संदर्भ पोस्ट करें जिसमें यह कोड दिखाई देता है। –
क्या यह चार फ़ंक्शन लौटने और सी-स्टाइल एलिप्स लेने की सरणी के संदर्भ में नहीं है? – Creris
यह एक फ़ंक्शन है जो दो वर्णों की सरणी के संदर्भ को वापस कर रहा है। दूसरा एक ('char (& f (...))') एक फ़ंक्शन है जो किसी वर्ण के संदर्भ को वापस कर रहा है। बाहरी संश्लेषण दूसरे मामले में अनिवार्य हैं और दोनों मामलों में '...' एक सी परिवर्तनीय तर्क पैक है। – 0x499602D2