मैं अपनी संरचना को अद्यतन कर रहा हूं और मैं इसे एक std :: स्ट्रिंग सदस्य जोड़ना चाहता था। मूल struct इस तरह दिखता है:सी ++ 11 गैर-तुच्छ सदस्यों के साथ 11 अज्ञात संघ
struct Value {
uint64_t lastUpdated;
union {
uint64_t ui;
int64_t i;
float f;
bool b;
};
};
बस यूनियन के लिए एक std :: स्ट्रिंग सदस्य को जोड़ने, बेशक,, एक संकलन त्रुटि होती है क्योंकि एक सामान्य रूप से वस्तु की गैर तुच्छ कंस्ट्रक्टर्स जोड़ने के लिए की आवश्यकता होगी। हालांकि, मैं एक struct के भीतर एक गुमनाम संघ का उपयोग कर रहा
union U
{
int a;
int b;
string s;
U();
~U();
};
: In the case of std::string (text from informit.com)
Since std::string defines all of the six special member functions, U will have an implicitly deleted default constructor, copy constructor, copy assignment operator, move constructor, move assignment operator and destructor. Effectively, this means that you can't create instances of U unless you define some, or all of the special member functions explicitly.
तो वेबसाइट निम्न नमूना कोड देने के लिए चला जाता है। मैं freenode पर ## सी ++ पूछा और उन्होंने मुझे कि बजाय struct में निर्माता डाल करने के लिए था ऐसा करने के लिए सही तरीका बताया है और मुझे इस उदाहरण कोड दिया:
#include <new>
struct Point {
Point() {}
Point(int x, int y): x_(x), y_(y) {}
int x_, y_;
};
struct Foo
{
Foo() { new(&p) Point(); }
union {
int z;
double w;
Point p;
};
};
int main(void)
{
}
लेकिन वहाँ से मैं कैसे समझ नहीं सकता बाकी विशेष कार्यों को बनाएं जो std :: स्ट्रिंग को परिभाषित करने की आवश्यकता है, और इसके अलावा, मैं पूरी तरह से स्पष्ट नहीं हूं कि उस उदाहरण में ctor कैसे काम कर रहा है।
क्या मैं किसी को थोड़ा स्पष्ट समझाने के लिए किसी को प्राप्त कर सकता हूं?
यह मुझे लगता है कि आपको क्या ज़रूरत है एक उचित [संस्करण] (http://www.boost.org/libs/variant/) ... – ildjarn
मेरे पास पहले से ही एक संस्करण वर्ग है जिसे मैं कहीं और उपयोग कर रहा हूं । मैं इस उदाहरण में इसका उपयोग नहीं कर रहा हूं, क्योंकि यह नेटवर्क पर क्रमबद्ध डेटा के लिए है और मैं डेटा को छोटा रखना चाहता था, इसलिए कक्षा में वेरिएंट आंतरिक (जैसे टाइपिंग जानकारी) रखता है, मैं बाहरी रखना चाहता हूं और निर्णय लेना चाहता हूं पैकेट स्कीमा के आधार पर क्या है। – OmnipotentEntity