พิจารณารหัสต่อไปนี้:
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 และข้อผิดพลาดคอมไพเลอร์เกิดขึ้น มีวิธีใดบ้าง (หรือมี c ++ 20) ในการ "ซ่อน" คลาสพื้นฐานจากการสร้างหรือไม่
template<class... Ts> B(Ts... args) : data{args...} {}
?