2012-06-25 16 views
6

जो मैं संग्रहित करना चाहता हूं वह कुछ चर बनाने के लिए एक आसान तरीका है। इसके लिए मैंने एक पेरिस्टेंसप्रोवाइडर क्लास लिखा है जो एक्सएमएल/आईएनआई फाइलों में डेटा स्टोर करने के लिए बूस्ट प्रॉपर्टी ट्री कार्यक्षमता को लपेटता है।सी ++ लगातार डेटा

पल मैं इस तरह काम करने होंगे पर:

ClassA::ClassA() 
{ 
    m_valueI = PersistenceProvider::getInstance.get<int>("valueI"); 
} 

ClassA::~ClassA() 
{ 
    PeristenceProvider::getInstance.set<int>("valueI", m_valueI); 
} 

लेकिन वहाँ इस तरह एक तरह से इस को छिपाने के लिए एक मौका है:

class ClassA 
{ 
    Persist<int, "valueI"> m_ValueI; 
} 
+0

मुझे लगता है कि आप पास टेम्पलेट के साथ प्राप्त कर सकते हैं, लेकिन आप मैक्रो की आवश्यकता होगी के लिए इसे बिल्कुल ठीक करने के लिए जादू। – Stormenet

+1

यदि आपको परिवर्तनीय नामों से स्ट्रिंग पहचानकर्ता उत्पन्न करने की आवश्यकता है तो आपको मैक्रोज़ –

+0

की आवश्यकता होगी क्या आप स्ट्रिंग अक्षर को टेम्पलेट पैरामीटर के रूप में पास कर सकते हैं? – tmpearce

उत्तर

0

ऐसा लगता है कि आप नहीं कर रहे हैं बने जानकारी के टन - बस कुछ विकल्प पैरामीटर। यदि ऐसा है, तो फ़ंक्शन कॉल को अपने स्वयं के फ़ंक्शंस में लपेटें जो दो तर्क लेते हैं - एक std :: string या const char * और आइटम का प्रकार जारी रखा जा रहा है। यदि जारी किए जा रहे प्रकारों की संख्या सीमित है (उदा। Int, double, std :: string), यह ठीक काम करेगा।

1

यह संभव है लेकिन बिल्कुल इस तरह से नहीं। आप टेम्पलेट को तुरंत चालू करने के लिए स्ट्रिंग अक्षर का उपयोग नहीं कर सकते हैं। बाहरी संबंध के साथ स्ट्रिंग ऑब्जेक्ट्स को केवल गैर-प्रकार के तर्क होने की अनुमति है। तो स्ट्रिंग निरंतर extern के रूप में परिभाषित किया जाना चाहिए और char* नहीं, char[] हो।

उदाहरण देखें (यह प्रिंट होगा "नमस्ते" और "दुनिया", बहुत अच्छा, है ना?):

extern const char hello[] = "Hello"; 
extern const char world[] = "World"; 

template<const char* s> struct X 
{ 
    X() 
    { 
     std::cout << s << std::endl; 
    } 
}; 

X<hello> z1; 
X<world> z2; 
संबंधित मुद्दे