2013-08-10 5 views
7

मैं एक सी ++ प्रोग्राम को सी # में परिवर्तित कर रहा हूं, लेकिन इस भाग ने मुझे उलझन में डाल दिया है। वापसी क्या है * इसका मतलब है?सी ++ में 'वापसी * ​​इस' का क्या अर्थ है?

template< EDemoCommands msgType, typename PB_OBJECT_TYPE > 
class CDemoMessagePB : public IDemoMessage, public PB_OBJECT_TYPE 
{ 
    (...) 
    virtual ::google::protobuf::Message& GetProtoMsg() { return *this; } 
} 

यह सी # में अनुवाद कैसे करेगा?

+0

टैग सी ++ होना चाहिए। –

उत्तर

13

this वस्तु के लिए सूचक का मतलब है, तो *this एक वस्तु है। तो आप किसी ऑब्जेक्ट को वापस कर रहे हैं यानी *this ऑब्जेक्ट का संदर्भ देता है।

2

आप ऑब्जेक्ट का संदर्भ दे रहे हैं। this एक सूचक है और आप इसे अस्वीकार कर रहे हैं।

यह उस स्थिति में सी # return this; में अनुवाद करता है यदि आप एक आदिम से निपट नहीं रहे हैं।

2

अपने विशेष मामले में, आप 'इस' के संदर्भ को वापस कर रहे हैं, क्योंकि फ़ंक्शन का रिटर्न प्रकार एक संदर्भ है (&)। लौटे स्मृति के आकार के

बात हो रही है, यह

virtual ::google::protobuf::Message* GetProtoMsg() { return this; } 

रूप में एक ही लेकिन कॉल समय में उपयोग अलग है।

कॉल समय, आप की तरह कुछ द्वारा समारोह की वापसी मान संग्रहीत कॉल करेगा:

Message& m = GetProtoMsg(); 
+1

यह पॉइंटर लौटने के समान "वही" नहीं है। यह एक तरह का है। – juanchopanza

+0

सही। संपादित ^^ – Lake

1

एक पॉइंटर का उपयोग करके हम उस चर में संग्रहीत मूल्य तक सीधे पहुंच सकते हैं जो यह इंगित करता है। ऐसा करने के लिए, हमें बस पॉइंटर के पहचानकर्ता को तारांकन (*) से पहले करना होगा, जो dereference ऑपरेटर के रूप में कार्य करता है और इसका शाब्दिक रूप से अनुवाद किया जा सकता है "मान द्वारा इंगित किया गया"।

1

सी # this की तरह आप जिस ऑब्जेक्ट का उपयोग कर रहे हैं उस पर एक निहित सूचक है।
अपने विशेष मामले में, जब आप ऑब्जेक्ट पर संदर्भ & वापस करते हैं, तो आपको *this का उपयोग करना होगा यदि आप उस ऑब्जेक्ट को वापस करना चाहते हैं जिस पर आप वर्तमान में काम कर रहे हैं।
यह न भूलें कि कोई संदर्भ वैरिएबल स्वयं लेता है, या पॉइंटर (this) के मामले में, ऑब्जेक्ट (*this) पर इंगित करता है, लेकिन पॉइंटर (this) नहीं।

8

से सावधान रहें कि यदि आप एक समारोह जिसका वापसी प्रकार Type और नहीं Type& है पर return *this; इस्तेमाल करने की कोशिश, सी ++ वस्तु की एक प्रतिलिपि बनाने की कोशिश करेंगे और फिर तुरंत नाशक, आम तौर पर नहीं अभिप्रेत व्यवहार कहते हैं। तो रिटर्न प्रकार आपके उदाहरण के रूप में एक संदर्भ होना चाहिए।

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