9

次のコードを検討してください。

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 を使用する場合) はありますか?

4

4 に答える 4