std::initializer_list
コア言語が組み込まれていないのはなぜですか?
これは C++11 の非常に重要な機能のように思えますが、独自の予約キーワード (または類似のもの) はありません。
代わりに、コンパイラによって処理される新しい波括弧初期化リスト構文からの特別な暗黙的なマッピングinitializer_list
を持つ、標準ライブラリからの単なるテンプレート クラスです。 {...}
一見すると、このソリューションは非常にハックです。
これは、C++ 言語への新しい追加が実装される方法ですか?コア言語ではなく、いくつかのテンプレート クラスの暗黙の役割によってですか?
次の例を検討してください。
widget<int> w = {1,2,3}; //this is how we want to use a class
新しいクラスが選ばれた理由:
widget( std::initializer_list<T> init )
これらのアイデアに似たものを使用する代わりに:
widget( T[] init, int length ) // (1)
widget( T... init ) // (2)
widget( std::vector<T> init ) // (3)
const
古典的な配列、おそらくあちこちに追加できます- 言語には 3 つのドットが既に存在します (var-args、現在は variadic テンプレート)。構文を再利用してみませんか (そして組み込みのように感じさせます)
- 既存のコンテナだけで、追加
const
して&
それらはすべて、すでに言語の一部です。最初の 3 つのアイデアだけを書きましたが、他にも多くのアプローチがあると確信しています。