संरचना और वर्ग के सदस्यों पर पुनरावृत्ति
सी में, किसी संरचना या वर्ग के सदस्यों के माध्यम से उनके नाम पुनः प्राप्त करने के लिए पुनरावृति करना संभव है और मूल्य. इसे प्राप्त करने के लिए यहां कुछ दृष्टिकोण दिए गए हैं:
मैक्रोज़ का उपयोग करना
रिफ्लेक्टेबल मैक्रो का उपयोग उन संरचनाओं को परिभाषित करने के लिए किया जा सकता है जो आत्मनिरीक्षण की अनुमति देते हैं। मैक्रो संरचना के सदस्यों को प्रकार-नाम जोड़े की अल्पविराम से अलग की गई सूची के रूप में परिभाषित करता है। उदाहरण के लिए:
struct A
{
REFLECTABLE
(
(int) a,
(int) b,
(int) c
)
};
एक बार संरचना परिभाषित हो जाने के बाद, आप इसके सदस्यों पर पुनरावृत्ति करने और उनके नाम और मान प्रिंट करने के लिए विज़िटर फ़ंक्शन का उपयोग कर सकते हैं:
struct print_visitor
{
template
void operator()(FieldData f)
{
std::cout
void print_fields(T & x)
{
visit_each(x, print_visitor());
}
A x;
print_fields(x);
संरचनाओं को फ़्यूज़न अनुक्रमों के रूप में अनुकूलित करना
एक अन्य दृष्टिकोण BOOST_FUSION_ADAPT_STRUCT मैक्रो का उपयोग करके संरचना को फ़्यूज़न अनुक्रम के रूप में अनुकूलित करना है। यह मैक्रो संरचना सदस्यों को संबंधित प्रकार और मान वाले तत्वों के अनुक्रम के रूप में परिभाषित करता है। उदाहरण के लिए:
struct A
{
int a;
int b;
int c;
};
BOOST_FUSION_ADAPT_STRUCT
(
A,
(int, a)
(int, b)
(int, c)
)
एक बार संरचना अनुकूलित हो जाने के बाद, आप सदस्यों पर पुनरावृत्ति करने और उनके नाम और मान प्रिंट करने के लिए एक रेंज लूप का उपयोग कर सकते हैं:
struct print_visitor
{
template
void operator()(Index, C & c)
{
std::cout ::call()
(c)
void print_fields(C & c)
{
typedef boost::mpl::range_c::type::value> range;
boost::mpl::for_each(boost::bind(print_visitor(), boost::ref(c), _1));
}
ये दोनों दृष्टिकोण आपको संरचनाओं और कक्षाओं का आत्मनिरीक्षण करने की अनुमति देते हैं, जो रनटाइम पर उनके सदस्यों और उनके मूल्यों तक पहुंच प्रदान करते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3