क्या decltype के प्रकार (समारोह) और कारण है कि मैं की जरूरत नहीं है "स्थिरांक" यहाँ क्वालीफायर है?

वोट
2

मैं के प्रकार के भ्रमित कर रहा हूँ decltypeएक समारोह। यह न तो एक समारोह सूचक है और न ही functor है। मुझे इसे कैसे प्रयोग में लाना है? और क्यों पूर्ण टेम्पलेट विशेषज्ञता यहाँ की आवश्यकता नहीं है constक्वालीफायर।

class SomeClass
{
public:
    template <typename T>
    void insideTemplateMethod(const T & value)
    {
    }
};
template
void SomeClass::insideTemplateMethod<decltype(std::hex)>(decltype(std::hex) & ); // no need to specify const

template
void SomeClass::insideTemplateMethod<int>(int &); // error, must specify const

int main(void)
{}

अगर मैं हटाने &, यह तो शिकायत है कि

error: template-id 'insideTemplateMethod<std::ios_base&(std::ios_base&)>' for 'void SomeClass::insideTemplateMethod(std::ios_base& (*)(std::ios_base&))' does not match any template declaration

देखो, decltype(std::hex)पैरामीटर में क्षेत्र के लिए काट लिया जाता है std::ios_base& (*)(std::ios_base&), जबकि यह करने के लिए काट लिया जाता है std::ios_base&(std::ios_base&)टेम्पलेट के पैरामीटर में।

तुम मुझे यह समझने में मदद कर सकते हैं?

02/12/2019 को 23:56
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
2

std::hexएक समारोह है, निम्नलिखित घोषणा के साथ (देखें cppreference ):

std::ios_base& hex( std::ios_base& str );

यदि Tइस समारोह के प्रकार है, अर्थात् std::ios_base&(std::ios_base&), तो है क्योंकि यह एक समारोह प्रकार है, const Tके रूप में ही है T। यही कारण है कि स्पष्ट इन्स्टेन्शियशन परिभाषा के बिना लिखा जा सकता है const

नोट अगर आप को दूर कि &स्पष्ट इन्स्टेन्शियशन परिभाषा से, तो समारोह पैरामीटर प्रकार decltype(std::hex)एक समारोह सूचक प्रकार के एक समारोह के प्रकार से मानक परिवर्तन से गुजरता है। यही कारण है कि आप देख रहे हैं है (*)त्रुटि संदेश में।

03/12/2019 को 00:02
का स्रोत उपयोगकर्ता

वोट
0

अदालत में तलब करने के लिए मानक :

एक के प्रभाव सीवी-क्वालीफायर-सेक एक समारोह declarator में जोड़ने के समान नहीं है सीवी-योग्यता समारोह प्रकार की चोटी पर। उत्तरार्द्ध मामले में, सीवी-क्वालिफायर अनदेखी कर रहे हैं। [ध्यान दें: एक समारोह प्रकार एक है कि सीवी-क्वालीफायर-सेक एक नहीं है सीवी योग्य प्रकार; वहाँ कोई नहीं है सीवी योग्य समारोह प्रकार के। - अंत टिप्पणी] [उदाहरण:

typedef void F();
struct S {
    const F f;        // OK: equivalent to: void f();
};

- अंत उदाहरण]

03/12/2019 को 00:11
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more