के लिए विकल्प/शायद कक्षा मैं सी ++ में स्काला जैसी विकल्प/हास्केल जैसी कक्षा को लागू करना चाहता हूं। दक्षता कारणों से, मैं गतिशील रूप से आवंटित स्मृति का उपयोग नहीं करना चाहता, न ही मैं बहुरूपता का उपयोग करना चाहता हूं। इसके अलावा, मैं नहीं चाहता कि एम्बेडेड प्रकार का कोई ऑब्जेक्ट बनाया जाए, यदि विकल्प कोई नहीं है।सी ++
क्या कोई मुझे बता सकता है कि निम्नलिखित दृष्टिकोण समस्याएं पैदा कर सकता है या नहीं? मुझे अपने विकल्प वर्ग के भीतर एम्बेडेड ऑब्जेक्ट के लिए स्थैतिक रूप से स्मृति आवंटित करना है, लेकिन मैं एम्बेडेड प्रकार के सदस्य फ़ील्ड को परिभाषित नहीं कर सकता, क्योंकि यह विकल्प ऑब्जेक्ट के निर्माण पर प्रारंभ किया जाएगा, भले ही विकल्प कोई नहीं है।
template <typename T>
class Option {
private:
uint8_t _storage [sizeof (T)];
T * _embedded;
public:
Option() : _embedded (nullptr) {
}
Option (const T & obj) : _embedded (new (_storage) T (obj)) {
}
Option (const Option<T> & other)
: _embedded (
other->_embedded ? new (_storage) T (other->_embedded) : nullptr
) {
}
// ...
~Option() {
if (_embedded) _embedded->~T();
}
};
आप जांच सकते हैं कि कैसे [बूस्ट.ऑप्शनल] (http://www.boost.org/doc/libs/1_51_0/libs/optional/doc/html/index.html) लागू किया गया है। – kennytm
संकेत के लिए धन्यवाद। मुझे पता होना चाहिए कि बूस्ट में यह है। – JohnB
वास्तव में, यह वास्तव में एक चालाक प्रतिनिधित्व है। आपको ** असाइनमेंट ** से भी निपटने की आवश्यकता होगी, लेकिन अन्यथा मुझे वास्तव में केवल एक बूलियन की बजाय पॉइंटर को संग्रहीत करने का विचार पसंद है। निश्चित रूप से चीजों को बाद में आसान बनाता है। –