読者です 読者をやめる 読者になる 読者になる

Visual Studio 2012ではstd::initializer_listが使えない。そんな時はstd::arrayを使うとスッキリする

C++/TDD C++ C++11 std::array STL VisualStudio

vs-logo.png

まずは、祝リリース Visual Studio 2013 Community!!

これを皮切りに、Windowsデベロッパーが増えてほしいですね!

そして、Visual Studio 2015 Preview

※ 11/13 現在、Preview 版のダウンロードは英語版のみの提供となります。(日本語版は近日公開)

リリースサイクルが固定化されて、すごくいい感じな近年のVisual Studio(以下、VS)です。

ツールの進化にしっかり着いて行きたい今日このごろですが、ぼくらはVS2012です。

そして、VS2012では、std::initializer_listがサポートされていません!

以下は、

  1. 固定長配列にもstd::vectorを使いたい
  2. でも、可変はこまる。不変じゃなきゃ
  3. でも、VS2012なんだ

という人(マイノリティか。)にオススメです。

std::initializer_list とは

STL(C++標準ライブラリ)のクラスです。

initializer_list (C++11) - cpprefjp - C++ Library Reference

<initializer_list>ヘッダで提供されるinitializer_listクラスは、ユーザー定義型が初期化子リスト構文による初期化を可能にするための特別なクラスである。コンテナクラスの初期化、代入に使用される。

vector等のコンテナの使いやすさはそのままに、それを不変(Immutable)にできるので重宝します。

生配列は使いたくない。constしたい。それができる「std::array」

以下のスニペットは、

  • これまで(上)
  • 理想(中)
  • 現状のベスト(下)

をあらわしています。

std::arrayは生配列をラップしてstd::vectorのように使える便利なものです。

固定長の配列を使いたいけど、生配列はイヤだ。でもVSは2012なんだ。そんな要件を満たしてくれたstd::array。だいすき。君のことはわすれないよ。(VS2013に乗りかえるまでは)

参考リンク