मैं एक लॉगिंग/ट्रेसिंग इकाई पर काम कर रहा हूं (और कृपया मौजूदा लोगों को इंगित न करें, यह परिणाम के लिए जितना अधिक अनुभव है)।सी ++ में स्टैक पर बेनामी ऑब्जेक्ट्स?
रन-टाइम कॉलिंग स्टैक ट्रेस प्राप्त करने के लिए, विचार TraceObject
उदाहरण बनाना है कि पहली बार एक फ़ंक्शन दर्ज किया गया है, जिसमें वर्तमान वर्ग और फ़ंक्शन की जानकारी होती है। कुछ हद तक समान करने के लिए:
TraceObject to("MyClass", "myClassFunction");
TraceObject
के निर्माता एक प्रति धागा ढेर पर this
धक्का, नाशक इसे फिर से दिखाई नहीं देता। इस प्रकार स्टैक को कॉल स्टैक के लिए पूछताछ की जा सकती है।
मुझे यह संतुष्टि के लिए काम मिल गया। हालांकि, एक छोटा सा सिलाई है: ऑब्जेक्ट to
। यह डिजाइन द्वारा, कभी भी उस नाम से संदर्भित किया जाएगा। इसलिए, इसे की आवश्यकता नहीं है एक नाम है, जो कि क्लाइंट द्वारा उपयोग किए गए किसी भी पहचानकर्ता के साथ टकरा सकता है (या _
उपसर्ग, कार्यान्वयन के मामले में)।
tl; डॉ
, यह संभव ढेर पर एक गुमनाम, गैर अस्थायी वस्तु बनाने के लिए है (यानी एक ही है कि समारोह रिटर्न जब तक रहते हैं, लेकिन एक पहचानकर्ता नहीं है) और यदि हां, तो यह कैसे किया जाएगा?
मुझे लगता है कि यह सख्ती से संभव है नहीं है, लेकिन किसी मैक्रो और एक अस्पष्ट नाम के साथ, आप एक ही प्राप्त कर सकते हैं। क्या कोई वैध कारण है कि आपको इसे नामहीन होने की आवश्यकता क्यों है या यह "इसकी वास्तव में आवश्यक नहीं" चीज़ है। –
@ कार्तिकटी: हां, एक रैपर मैक्रो सामान्य विचार था। मैं बस सोच रहा था कि क्या मैं "अस्पष्ट" से दूर हो सकता हूं और "अदृश्य" प्राप्त कर सकता हूं। – DevSolar
@ कार्तिक टी बिल्कुल, यह भी है कि लॉग कैसे करता है तो मेरा अनुमान है: – stijn