2010-04-07 15 views
6

क्या सामान्य कक्षा में चर/फ़ील्ड की संख्या निर्धारित करने के लिए सी ++ में यह संभव है? उदाहरणसी ++ टेम्पलेट मेटा प्रोग्रामिंग, सदस्य चर की संख्या?

// suppose I need metaclass number_members determines number of members 

struct example { int i, j; }; 
assert(number_members<example>::value==2); 

के लिए मैं एमपीएल के माध्यम से देखा है, लेकिन कार्यान्वयन नहीं पा सके।

धन्यवाद।

+0

आप यह जानना क्यों चाहते हैं कि वे कितने हैं? – Potatoswatter

+0

मुझे पता है कि प्रकारों के साथ कैसे काम करना है, मैं टेम्पलेट मेटा-प्रोग्रामिंग जैसे अन्य पहलुओं और सुविधाओं से परिचित नहीं हूं जैसे – Anycorn

उत्तर

7

नहीं सी ++ संरचनाओं में सामान्य आत्मनिरीक्षण प्रदान नहीं करता है।

आप एक सी ++0x std::tuple आज़मा सकते हैं, जिसमें सामान्य पीओडी struct की कुछ विशेषताएं हैं। या, Boost MPL लाइब्रेरी से अपना खुद का रोल करने का प्रयास करें। अगर आप सी ++ के साथ शुरुआत कर रहे हैं तो यह थोड़ा उन्नत होगा।

+1

इसके अलावा बूस्ट.फ्यूजन को भी देखें। टेम्पलेट्स और रनटाइम कोड को मिश्रण करने का यह एक अच्छा तरीका है। जब मैंने सिमिल-प्रतिबिंब की आवश्यकता होती है तो मैंने 'बूस्ट :: फ्यूजन :: मैप' को 'स्ट्रक्चर'/'क्लास' के कंकाल के रूप में व्यक्तिगत रूप से उपयोग किया है। –

1

नहीं। दुर्भाग्यवश, सी ++ में उस प्रकार का आत्मनिरीक्षण अंतर्निहित नहीं है। हालांकि, Qt के Meta Object Compiler (moc) जैसे कुछ अतिरिक्त प्रीप्रोकैसिंग के साथ, आप कुछ समान प्राप्त कर सकते हैं ... QMetaObject कक्षा propertyCount() प्रदान करती है; हालांकि, आपकी कक्षा को QObject से प्राप्त करने की आवश्यकता होगी, Q_OBJECT मैक्रो का उपयोग करें, और उन सभी के लिए गुण पंजीकृत करें जो काम करने के लिए ... इसलिए, संक्षेप में, यह स्वचालित नहीं है।

1

आप इसे सीधे नहीं कर सकते हैं। तब स्पष्ट सवाल यह है कि आप जो करने की कोशिश कर रहे हैं - संभावना है कि आप जो भी कर सकते हैं वह कर सकते हैं, लेकिन ऐसा करने का तरीका अलग-अलग हो सकता है।

+1

वास्तव में, वास्तव में कुछ भी विशिष्ट करने की कोशिश नहीं कर रहा है। बस सोचा कि मैं इसे कैसे कर सकता हूं और महसूस कर रहा हूं कि मुझे नहीं पता कि कैसे एक प्रश्न पूछने का फैसला किया गया। बस अतिरिक्त पहलुओं को सीखने की कोशिश कर रहा है। – Anycorn

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