次のコードを検討してください。
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で存在するでしょう)?
なぜコメントなのですか?動作しているようです、笑
—
user7769147
これは明らかな解決策なので、使用しない理由があると思いました。:)
—
19
xDは簡単すぎました。回答として書いた場合は、それを受け入れます
—
user7769147
template<class... Ts> B(Ts... args) : data{args...} {}
ですか?