इस कोड पर विचार करें:क्या मैं std :: संस्करण में प्रत्येक स्ट्रक्चर के लिए स्पष्ट रूप से एक कन्स्ट्रक्टर लिखने से बच सकता हूं?
#include <variant>
struct x {
int y;
};
int main() {
std::variant<x> v(std::in_place_type<x>, {3}); /*1*/
return std::get<x>(v).y;
}
यह संकलन नहीं करता है और न करता जब लाइन /*1*/
से {}
को दूर करने, भले ही कुल प्रारंभ
x a{3};
x b({3});
दोनों "निर्माता की तरह" रूपों में काम करता है। क्या मैं किसी भी तरह से std::variant
प्रारंभकर्ता को अपने वास्तविक दुनिया के मामले में इस्तेमाल होने वाली प्रत्येक संरचना के लिए उबाऊ बॉयलरप्लेट कन्स्ट्रक्टर लिखने के बिना कुल प्रारंभिकरण का उपयोग करके structs बनाने की संभावना से अवगत करा सकता हूं?
मैं इस काम करने के लिए, किसी भी तरह, के रूप में cppreference प्रति दो भार के (5) और (6) प्रश्न में दोनों का कहना है कि
Constructs निर्दिष्ट विकल्प टी और साथ एक संस्करण initializes उम्मीद करेंगे तर्क साथ निहित मूल्य [...]
मैं जीसीसी 7 का उपयोग कर रहा है कि अगर मायने रखती है।
यदि यह आपको शान्ति देता है, तो 'std :: make_unique' और परिवार की समान सीमा होती है :( – Rakete1111
कुल प्रारंभिकरण हमेशा सी ++ प्रारंभिक प्रणाली –