सी ++ बनाने की मेरी महाकाव्य खोज में चीजें नहीं करना चाहिए, मैं एक संकलित समय उत्पन्न कक्षा को एक साथ रखने की कोशिश कर रहा हूं।सी ++ कोड जनरेशन
एक पूर्वप्रक्रमक परिभाषा के आधार पर, इस तरह के रूप (किसी न किसी अवधारणा)
CLASS_BEGIN(Name)
RECORD(xyz)
RECORD(abc)
RECORD_GROUP(GroupName)
RECORD_GROUP_RECORD(foo)
RECORD_GROUP_RECORD(bar)
END_RECORDGROUP
END_CLASS
जबकि मैं काफी यकीन है कि मैं एक वर्ग है कि (संरचना इस तरह की का उपयोग कर फ़ाइल सिस्टम से डेटा पढ़ता है शायद यह कर उत्पन्न कर रहा हूँ टेम्पलेट मेटाप्रोग्रामिंग का उपयोग करके), मैं नहीं देखता कि डेटा को पढ़ने के लिए डेटा और फ़ंक्शन तक पहुंचने के लिए मैं दोनों कार्यों को कैसे उत्पन्न कर सकता हूं।
मैं इस तरह एक वर्ग कुछ के साथ खत्म करना चाहते हैं
class Name{
public:
xyz_type getxyz();
void setxyz(xyz_type v);
//etc
list<group_type> getGroupName();
//etc
void readData(filesystem){
//read xyz
//read abc
//etc
}
};
किसी को भी अगर यह भी संभव है किसी भी विचार है?
--EDIT--
इस लिए करना उपयोग स्पष्ट करने के लिए। मेरे पास एक मानक प्रारूप में फ़ाइलें हैं जिन्हें मैं पढ़ना चाहता हूं। प्रारूप पहले ही परिभाषित किया गया है, इसलिए यह बदलने के लिए खुला नहीं है। प्रत्येक फ़ाइल में कोई भी संख्या रिकॉर्ड हो सकता है, जिनमें से प्रत्येक में कोई भी उप-रिकॉर्ड हो सकता है।
कई रिकॉर्ड प्रकारों में प्रत्येक के उप-रिकॉर्ड का एक अलग सेट होता है, लेकिन उन्हें परिभाषित किया जा सकता है। तो उदाहरण के लिए, ऊंचाईमैप रिकॉर्ड में ऊंचाईमैप होना चाहिए, लेकिन वैकल्पिक में मानक हो सकते हैं।
तो मैं तो जैसे कि के लिए एक रिकार्ड को परिभाषित करना चाहते हैं:
class Heightmap{
public:
std::string getHeightmap(){
return mHeightmap->get<std::string>();
}
void setHeightmap(std::string v){
mHeight->set<std::string>(v);
}
bool hasNormal(){
return mNormal != 0;
}
//getter and setter functions for normals go here
private:
void read(Record* r){
mHeightmap = r->getFirst(VHDT);
mNormal = r->getFirst(VNML);
}
SubRecord* mHeightmap, mNormal;
}
मुद्दा:
CLASS_BEGIN(Heightmap)
RECORD(VHDT, Heightmap, std::string) //Subrecord Name, Readable Name, Type
RECORD_OPTIONAL(VNML, Normals, std::string)
END_CLASS
जो के लिए मैं इस तरह एक वर्ग की कार्यक्षमता के साथ उत्पादन कुछ चाहेगा मुझे लगता है कि मुझे हर प्रीप्रोसेसर परिभाषा की दो बार आवश्यकता है। एक बार कक्षा के भीतर फ़ंक्शन परिभाषा को परिभाषित करने के लिए, और एक बार पढ़ने के फ़ंक्शन को बनाने के लिए। चूंकि प्रीप्रोसेसर पूरी तरह कार्यात्मक है, इसलिए मैं डेटा को कतार में धक्का नहीं दे सकता और कक्षा को END_CLASS मार्को परिभाषा पर उत्पन्न नहीं कर सकता।
मुझे इस मुद्दे के आसपास कोई रास्ता नहीं दिखाई दे रहा है, लेकिन आश्चर्य हुआ कि अगर किसी को सी ++ की अधिक समझ हो।
यह संभव है, मुझे संदेह है। क्या आप दीवार पर टक्कर मार रहे हैं, इस बारे में अधिक सटीक हो सकते हैं? –
यह स्पष्ट नहीं है कि आपको ऐसा करने से क्या फायदे हैं - कृपया समझाएं। –