फ़ंक्शन परिभाषा के आउट-ऑफ-क्लास घोषणा में वर्ग-नाम को पूरी तरह से अर्हता प्राप्त करना असंभव है


12

इस कार्यक्रम के परिणामस्वरूप एक अवांछित पार्सिंग लालच मर चुका है:

struct float4x4 {};
class C
{
    float4x4 M();
};

float4x4 ::C::M()
{
    return float4x4{};
}

: 8: 1: त्रुटि: 'फ्लोट 4x4' में 'सी' नाम का कोई सदस्य नहीं; क्या आपका मतलब बस 'सी' था?
float4x4 :: C :: M ()
^ ~~~~~~~~~~~~

अनुगामी रिटर्न प्रकार का उपयोग करके 'निश्चित' किया जा सकता है:

auto ::C::M() -> float4x4
{}

अब सब अच्छा है।

इसलिए मुझे लगता है कि जब हम शीर्षक-वापसी-प्रकार घोषणा सिंटैक्स का उपयोग कर रहे हैं, तो हम पूरी तरह से वर्ग-नाम को योग्य नहीं बना सकते हैं?


2
जब तक C ++ व्हाट्सएप को इग्नोर करता है ::, मुझे लगता है कि कोई और रास्ता नहीं है।
यक्षिसारिवेन

@Someprogrammerdude हां, यह चेक करें Godbolt.org/z/mt6GHD
v.oddou

3
यह ::Cहिस्सा किसी अन्य समस्या के लिए समाधान की तरह दिखता है। अन्यथा यह बस हो सकता था C(जैसे कि कंपाइलर सुझाव देता है;)
rustyx

2
@rustyx यह सिर्फ ट्रांसपॉइलर द्वारा कोड का यांत्रिक पुन: उत्सर्जन है जो इस स्थिति में एक अल्ट्रा कॉम्प्लेक्स "कम से कम योग्य नाम" निष्पादित नहीं करना चाहता है। एफक्यू-नाम को छोड़ना पूरी तरह से देखने को नजरअंदाज कर देता है और ऐसे उपकरणों के लिए सुविधाजनक है।
v.oddou

जवाबों:


10

आप कोष्ठक को भंग कर सकते हैं:

float4x4 (::C::M)()
{
    return float4x4{};
}

मैं वास्तव में आपको यह नहीं बता सकता कि यह किस नियम से बनता है, जबकि यह कोष्ठक के बिना नहीं है, हालांकि मैंने gcc और क्लैंग (दोनों -pedantic) के साथ परीक्षण किया है । मैं अनुगामी रिटर्न प्रकार पसंद करूंगा।


1
अविश्वसनीय। वास्तव में हम कर सकते हैं। Godbolt.org/z/KCFbJZ जो घृणित है, लेकिन यह भयानक है। बेशक स्टाइल के मामले में ट्रेलिंग बढ़िया है। लेकिन मेरे मामले में मैं एक बोली को लक्षित करता हूं जो इसका समर्थन नहीं करती है।
v.oddou
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.