【发布时间】:2020-04-17 07:06:11
【问题描述】:
考虑以下代码:
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 here 提出了一个解决方案,但是,它不适用于元素默认初始化: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...} {}? -
为什么是评论?它似乎正在工作,大声笑
-
这是一个显而易见的解决方案,我认为您有理由不使用它。 :)
-
这太容易了xD。如果你把它写成答案,我会接受它
标签: c++ initialization c++20 aggregate-initialization