निम्नलिखित कोड पर विचार करें:
struct A
{
// No data members
//...
};
template<typename T, size_t N>
struct B : A
{
T data[N];
}
इस तरह आपको B को इनिशियलाइज़ B<int, 3> b = { {}, {1, 2, 3} };
करना है : मैं बेस क्लास के लिए अनावश्यक खाली {} से बचना चाहता हूँ। Jarod42 द्वारा यहां एक समाधान प्रस्तावित किया गया है , हालांकि, यह तत्वों के साथ काम नहीं करता है डिफ़ॉल्ट आरंभीकरण: B<int, 3> b = {1, 2, 3};
ठीक है, लेकिन B<int, 3> b = {1};
नहीं है: b.data[1]
और b.data[2]
डिफ़ॉल्ट 0 से आरंभिक नहीं है, और एक संकलक त्रुटि होती है। क्या निर्माण से बेस क्लास को "छिपाने" के लिए कोई रास्ता है (या सी ++ 20 के साथ होगा)?
template<class... Ts> B(Ts... args) : data{args...} {}
?