मैं सी ++ ऑब्जेक्ट्स को क्रमबद्ध करने/डी-क्रमबद्ध करने के लिए कुछ मेटा डेटा मॉडल करने का प्रयास कर रहा हूं। यहां कुछ ऐसा है जो मुझे आवश्यकतानुसार & बोल्ट को पकड़ता है; यह जीसीसी 5.2 (g++ sample.cpp -std=c++14
) और क्लैंग 3.6 (clang++ sample.cpp -std=c++14
) के साथ संकलित करता है।अपूर्ण प्रकार और प्रारंभकर्ता_सूची
मेरा प्रश्न उदाहरण में struct TypeInfo
के बारे में है। इसमें स्वयं के std::initializer_list
शामिल हैं। क्या यह मानक-अनुरूप है?
#include <cstdint>
#include <initializer_list>
enum class TypeCode : std::uint8_t { BOOLEAN, INT, OBJECT, STRING, SENTINEL };
struct TypeInfo
{
TypeCode typeCode_;
char fieldName_[64];
union
{
std::uint16_t textMinLength_;
std::uint16_t objectVersionMajor_;
};
union
{
std::uint16_t textMaxLength_;
std::uint16_t objectVersionMinor_;
};
// set only if typeCode_ = OBJECT
std::initializer_list <TypeInfo> objectTypeInfos_;
};
int main()
{
TypeInfo const sti { TypeCode::STRING, "updatedBy", { .textMinLength_ = 0 }, { .textMaxLength_ = 16 } };
TypeInfo const iti { TypeCode::INT, "amount", { 0 }, { 0 } };
TypeInfo const oti { TypeCode::OBJECT, "startTime", { .objectVersionMajor_ = 1 }, { .objectVersionMinor_ = 0 }, {
TypeInfo { TypeCode::INT, "weekdays", { 0 }, { 0 } },
TypeInfo { TypeCode::INT, "timeOfDay", { 0 }, { 0 } },
TypeInfo { TypeCode::STRING, "timezone", { .textMinLength_ = 0 }, { .textMaxLength_ = 5 } }
} };
TypeInfo const noti { TypeCode::OBJECT, "schedule", { .objectVersionMajor_ = 1 }, { .objectVersionMinor_ = 0 }, {
TypeInfo { TypeCode::INT, "id", { 0 }, { 0 } },
TypeInfo { TypeCode::STRING, "description", { .textMinLength_ = 0 }, { .textMaxLength_ = 16 } },
TypeInfo { TypeCode::OBJECT, "startTime", { .objectVersionMajor_ = 1 }, { .objectVersionMinor_ = 0 }, {
TypeInfo { TypeCode::INT, "weekdays", { 0 }, { 0 } },
TypeInfo { TypeCode::INT, "timeOfDay", { 0 }, { 0 } },
TypeInfo { TypeCode::STRING, "timezone", { .textMinLength_ = 0 }, { .textMaxLength_ = 5 } }
} }
} };
}
... कम से कम मानते हुए कि डीआर को हल किया गया है जैसा कि आप स्पष्ट रूप से उम्मीद करते हैं। दायर होने के बाद से कोई कार्रवाई नहीं की गई है, इसलिए इसे अभी भी "एनएडी" के रूप में हल किया जा सकता है। मुझे संदेह है कि ऐसा होगा, लेकिन यह अभी भी एक ऐसा नहीं है कि इसे अपूर्ण प्रकारों को अनुमति देने के पक्ष में हल किया जाएगा। –
@ जेरीकॉफिन यह दोष पूरी तरह से उचित है और तदनुसार हल किया जाएगा।मैं कई कारणों के बारे में सोच सकता हूं जो वर्तमान में यूबी इस कारण से हैं (उदाहरण के लिए सामान [इस] (http://coliru.stacked-crooked.com/a/ea23d84143def16f))। मुझे तुम्हारा मुद्दा नहीं दिख रहा है, क्षमा करें। – Columbo
मेरा मुद्दा यह है कि डीआर को हल करने के लिए * जरूरी नहीं है * कोड के इस विशेष टुकड़े को परिभाषित व्यवहार किया गया है। हां, इसे केवल एक कथन जोड़कर हल किया जा सकता है कि 'प्रारंभकर्ता_सूची' को अपूर्ण प्रकार पर तत्काल किया जा सकता है। इसे एक और सीमित तरीके से भी हल किया जा सकता है (उदाहरण के लिए) एक अपूर्ण प्रकार पर इसके तत्कालता को अनुमति देता है जब एक सीटीआर के पैरामीटर के रूप में उपयोग किया जा रहा है, लेकिन फिर भी वर्तमान मामले को बाहर कर देता है। निचली पंक्ति: इसकी अनुमति होने की संभावना है, लेकिन निश्चित नहीं है। –