次のコードを検討してください。
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};
is fine but B<int, 3> b = {1};
is not: b.data[1]
and b.data[2]
are not default initialized to 0, そしてコンパイラエラーが発生します. 基本クラスを構築から「隠す」方法はありますか (または c++ 20 を使用する場合) はありますか?