2009-12-26 15 views
15

मैं कुछ C++/CLI कोड (नई वाक्य रचना) के साथ काम कर रहा हूँ और एक सामान्य प्रकार की घोषणा करने के कोशिश कर रहा हूँ और यह डिफ़ॉल्ट है करने के लिए एक सदस्य चर सेट करना चाहते हैं।सी ++/सीएलआई सी # के डिफ़ॉल्ट (टी) के बराबर क्या है?

सी # में:

class Class<T> 
{ 
    T member = default(T); 
} 

CLI में बराबर क्या है?

generic<typename T> public ref class Class 
{ 
public: 
    Class() : member(default(T)) // <-- no worky 
    { 
    }  
private: 
     T member; 
}; 

उत्तर

11

दिलचस्प बात यह वाक्य रचना यह इस तरह दिखता है बनाता है: T()। इसे एक कॉपी कन्स्ट्रक्टर के अतिरिक्त की आवश्यकता होती है।

generic<typename T> 
    public ref class Class 
{ 
public: 
    Class() : member(T()) 
    { 
    } 

    Class(Class^ c) 
    { 
     member = c->member; 
    } 

private: 
    T member; 
}; 

संपादित DOH यह भी (इतने लंबे समय मैं उस शून्य भूल गया और 0 सी में एक ही बात कर रहे हैं ++ के लिए सी # देश में किया गया है, इसलिए अलग मूल्य और संदर्भ प्रकार मूलभूत मूल्यों के लिए कोई ज़रूरत नहीं) काम करता है :

generic<typename T> 
    public ref class Class 
{ 
public: 
    Class() : member(0) 
    { 
    } 

    Class(Class^ c) 
    { 
     member = c->member; 
    } 

private: 
    T member; 
}; 
+2

आप टी() के बारे में सही हैं और लगभग 0 वैध शून्य सूचक स्थिर हैं, लेकिन 'सदस्य (0)' हमेशा सही नहीं है: इसके लिए टी में एक सीटीओ है जो int लेता है। –

+0

कक्षा c = gcnew कक्षा (); बस ठीक है संकलित करता है। क्या टेम्पलेट प्रकार के लिए उस कन्स्ट्रक्टर की आवश्यकता होती है (जैसा कि ऑब्जेक्ट में कोई नहीं है) या यह इस मामले में है कि प्रबंधित हैंडल पॉइंटर प्रकार के लिए उस कन्स्ट्रक्टर की आवश्यकता होती है? – dkackman

+0

'नलप्टर' सी ++/सीएलआई के सी # 'नल' के बराबर है। '0' या 'न्यूल' एक प्रबंधित सूचक प्रकार नहीं है। –

1

लेकिन क्या निजी सदस्य पहले ही डिफॉल्ट कन्स्ट्रक्टर के साथ प्रारंभ नहीं हुआ है?

+0

यह है? यह मेरी याद है कि सी ++ सदस्य चर को प्रारंभ नहीं करता है। रनटाइम के साथ सी ++ और एक प्रबंधित ढेर मेमोरी शुरू करता है मुझे कोई जानकारी नहीं है। – dkackman

+2

सी ++ सदस्य चर में उनके डिफ़ॉल्ट कन्स्ट्रक्टर के साथ प्रारंभ किया जाता है। आप सोच रहे होंगे कि चींटियों को शून्य, या कुछ शुरू नहीं किया गया है .. यह निश्चित रूप से सच है। लेकिन जिन प्रकारों में रचनाकार होते हैं उन्हें उनके डिफॉल्ट कन्स्ट्रक्टर कहते हैं। –

+0

मेले बिंदु है, लेकिन यह देखते हुए कि मेरी प्रकार पैरामीटर एक मान प्रकार या एक संदर्भ प्रकार यह मुझे कोई रास्ता नहीं यह प्रारंभ करने के साथ छोड़ देता है हो सकता है। अलग-अलग कारण डिफ़ॉल्ट (टी) सी # का हिस्सा है। मुझे लगता है कि मैं सिर्फ एक सीएलआई समकक्ष की उम्मीद कर रहा था। – dkackman

संबंधित मुद्दे