2013-07-30 9 views
20

करने के लिए कोड मैं सी # में निम्नलिखित कोड है:संभव कन्वर्ट करने के लिए सी #, तैयार हो जाओ सी ++

public string Temp 
     { 
      get { return sTemp; } 
      set { 
       sTemp = value; 
       this.ComputeTemp(); 
      } 
     } 

यह इस बदलने और प्राप्त का उपयोग करें और इस तरह से स्थापित करने के लिए संभव है? मुझे पता है कि तुम इतनी तरह की घोषणा नहीं कर सकते हैं और मैं की जरूरत है ":" घोषित करने के लिए लेकिन जब मैं यह करने के लिए प्रयास करें:

public: 
     std::string Temp 
     { 
     get { return sTemp; } 
     set { 
       sTemp = value; 
       this.ComputeTemp(); 
      } 

त्रुटि मैं प्राप्त पर पहले "{" expected a ';' बताते हुए है। इसे ठीक करने के तरीके पर कोई सुझाव?

+14

** संचालक नोट: ** यह सवाल पहले से ही अपने पाठ्यक्रम समाप्त हो गया है। यदि आप इसकी सत्यता पर टिप्पणी करना चाहते हैं, तो इसे [मेटा पोस्ट] पर ले जाएं (http://meta.stackexchange.com/questions/191089/why-do-we-let-hostile-users-dictate-the-perception- के-ढेर-अतिप्रवाह)। धन्यवाद। –

+1

देशी सी ++ में [सी #-जैसी गुणों का संभावित डुप्लिकेट?] (Http://stackoverflow.com/questions/4225087/c-like-properties-in-native-c) –

उत्तर

37

क्या आप सी ++/सीएलआई का उपयोग कर रहे हैं? इसलिए इस संपत्ति वाक्य रचना

public: 
    property std::string Temp { 
    std::string get() { return sTemp; } 
    void set(std::string value) { sTemp = value; this->ComputeTemp(); } 
    } 

है, तो आप सामान्य सी उपयोग करने के लिए कोशिश कर रहे हैं ++ तो आप भाग्य से बाहर हैं। सामान्य सी ++ कोड के लिए कोई समतुल्य सुविधा नहीं है। आप मनुष्य और सेटर तरीके

public: 
    std::string GetTemp() const { return sTemp; } 
    void SetTemp(const std::string& value) { 
    sTemp = value; 
    this->ComputeTemp(); 
    } 
+3

बाद के मामले में, मानक नामकरण सम्मेलन लगता है गेटर के लिए 'टी temp()' और सेटर के लिए 'शून्य अस्थायी (टी मान) 'होना। – CodesInChaos

+0

@CodesInChaos मैंने निश्चित रूप से दोनों तरीकों को देखा है (उपसर्ग और कोई उपसर्ग सेट करें)। मेरी निजी प्राथमिकता है कि मेरे प्रारंभिक जावा दिनों – JaredPar

11

का सहारा लिए एक समान प्रश्न से अपने जवाब में से एक पेस्ट कॉपी करने के लिए की आवश्यकता होगी:

चेतावनी: यह एक जीभ में गाल प्रतिक्रिया है और भयानक है !! !

हाँ, यह एक तरह से संभव है :)

template<typename T> 
class Property 
{ 
private: 
    T& _value; 

public: 
    Property(T& value) : _value(value) 
    { 
    } // eo ctor 

    Property<T>& operator = (const T& val) 
    { 
     _value = val; 
     return(*this); 
    }; // eo - 

    operator const T&() const 
    { 
     return(_value); 
    }; // eo() 
}; 

फिर अपने वर्ग, अपने सदस्यों के लिए गुण घोषित करने की घोषणा:

class Test 
{ 
private: 
    std::string m_Test; 

public: 
    Test() : text(m_Test) 
    { 
    }; 

    Property<std::string> text; 
}; 

और सी # शैली कहते हैं!

Test a; 
a.text = "blah"; 

std::string content = a.text; 
+0

से संभवतः होल्ड/सेट उपसर्ग हो, ध्यान दें कि इस तरीके से गुण कक्षा को थोड़ा बड़ा बनाते हैं, अन्यथा –

+0

@MooingDuck, सही - लेकिन मैं चाहता हूं इसे पहले स्थान पर करने की भी सलाह दीजिए, इसलिए शीर्ष बिंदु पर अस्वीकरण - यह * किया जा सकता है ... बस .. हाँ ...;) –

+2

+1, यह बुरा और चालाक दोनों है :) – JaredPar

3

विजुअल C++ आप __declspec(property), इस तरह उपयोग कर सकते हैं:

public: 
    __declspec(property(get=get_Temp, put=set_Temp)) std::string Temp; 

    const std::string& get_Temp { return sTemp; } 
    void set_Temp(std::string value) { 
      sTemp = std::move(value); 
      this->ComputeTemp(); 
    } 
+0

हालांकि, संपत्ति 'Temp' के बिना सीधे' get_Temp/set_Temp' का उपयोग करना बेहतर है, क्योंकि यह उन स्थानों को grep करना आसान है जहां Temp का उपयोग/संशोधित किया गया है। – Abyx

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