C ++ में एक चर के माध्यम से एक संरचना में एक सदस्य तक पहुंचें


10

मेरे पास दो सदस्यों के साथ एक संरचना है, उदाहरण के लिए:

struct DataSet {
    int x;
    int y;
};

..., और मुझे एक विधि में उन तक पहुंचना है, लेकिन केवल एक समय में, उदाहरण के लिए:

void foo(StructMember dsm) { // ("StructMember" does not exist)
    DataSet ds;
    ds.x = 4;
    ds.y = 6;

    std::cout << ds.dsm * ds.dsm << std::endl;
}
foo(x);
foo(y);

आउटपुट मैं चाहता हूँ:

16
36

जब मुझे इस तरह की समस्या का समाधान करना है तो मुझे क्या करना चाहिए? क्या कोई डेटा प्रकार है जो किसी सदस्य तक पहुंच सकता है?


केवल एक चीज जो मैं सोच सकता हूं वह यह है कि आप सूचक अंकगणितीय का उपयोग कर सकते हैं। आप संरचना की शुरुआत के सापेक्ष एक ऑफसेट सदस्य के रूप में पारित कर सकते हैं। यह सदस्यों के आकार पर निर्भर करेगा। मुझे लगता है कि आप यह सुनिश्चित कर सकते हैं कि आप शब्द सीमाओं के साथ गठबंधन कर सकते हैं, इसलिए आप dsm = 0एक्सेस करना xऔर dsm = 4एक्सेस yकरना चाहते हैं, फिर आप उन्हें पसंद करेंगे int val = int(*(&ds+dsm))
--३ Apr8888

1
@ ocket8888 c++में पॉइंटर-टू-मेंबर हैं, इसलिए इस काम को करने के लिए कस्टम पॉइंटर हैक की कोई आवश्यकता नहीं है।
सुपर

@eerorika तुम सही हो। पहले मेरे पास सदस्यों के रूप में दो तार थे, लेकिन मैंने उन्हें इंट में बदल दिया। मैं "std ::" निकालना भूल गया हूँ।
एड्रियन

जवाबों:


10

हां, आप पॉइंटर-टू-मेंबर का उपयोग कर सकते हैं। इस प्रकार के लिए सिंटैक्स है TypeOfMember TypeOfStruct::*, और आप तक पहुँचने के लिएstruct_variable.*pointer_variable

using StructMember = int DataSet::*;  // Pointer to a member of `DataSet` of type `int`

void foo(StructMember dsm) {
    DataSet ds;
    ds.x = 4;
    ds.y = 6;

    std::cout << ds.*dsm * ds.*dsm << std::endl;
}

int main() {
    foo(&DataSet::x);
    foo(&DataSet::y);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.