HEXA BLOG

プログラム

HEXA BLOGプログラム2012.2.21

VisualC++11.0

こんにちはぴかぴか(新しい)
ここ最近風邪気味でしたが、
土日ですっかり元気を取り戻したイワモーですグッド(上向き矢印)
さて、皆さんは、VisualStudioの次世代バージョンが利用できる事はご存知でしょうか?
まだ正式名称は決まっていない様ですが、VisualStudio11という名前で、
デベロッパープレビュー版がマイクロソフト様から配布されています目
VisualStudio11になり、それに付随してVisualC++11.0となり、ライブラリの機能も強化され、
C++11(C++0x)のサポートもかなりされる様になっています晴れ
C++11については下記をご参照下さい。
http://ja.wikipedia.org/wiki/C%2B%2B11
今回はVisualC++11.0の機能を2つ程紹介してみたいと思います手(チョキ)
まず、for eachが標準でサポートされる様になりました目
例えば、今までだとSTLのalgorithmを呼び出し、関数を作成してfor_eachを呼び出す必要がありましたが……
for eachはVisualC++8.0で既にサポートされていた様です!お恥ずかしい……
for eachの箇所でauto変数を用いているので、VisualC++10.0水準となります。

  1. #include<algorithm>
  2. #include<iostream>
  3. #include<vector>
  4. void print(int i);
  5. {
  6. std::cout << i << std::endl;
  7. }
  8. void main()
  9. {
  10. std::vector<int&gt hogeVector;
  11. hogeVector.push_back(0);
  12. hogeVector.push_back(1);
  13. hogeVector.push_back(2);
  14. hogeVector.push_back(3);
  15. std::for_each(hogeVector.begin(),hogeVector.end() ,print);
  16. }

VisualC++11.0では言語そのものに既に標準で組み込まれており、

  1. #include<iostream>
  2. #include<vector>
  3. void main()
  4. {
  5. std::vector<int&gt hogeVector;
  6. hogeVector.push_back(0);
  7. hogeVector.push_back(1);
  8. hogeVector.push_back(2);
  9. hogeVector.push_back(3);
  10. //auto iterator はhogeVectorのイテレーターとなります
  11. //hogeVectorの最後の要素になるまで、iteratorをループしていきます。
  12. for each (auto iterator in hogeVector)
  13. {
  14. std::cout << iterator << std::endl;
  15. }
  16. }

この様にauto変数とfor eachを組み合わせる事で、かなり自然で楽な構文を書く事が出来ます。
auto変数については、VisualC++10.0(VisualStudio2010)から標準機能として装備されており、
コンパイラが型を自動的に決めてくれる変数です。
例えば

  1. void main(void)
  2. {
  3. auto i = 10; //int型に自動的に認識してくれる
  4. auto f = 10.0F; //float型…
  5. auto d = 10.0; //double型…
  6. auto c = 'C'; //char型…
  7. }

デバッグして型を見てみると、自動的に型が選択されている事がわかると思います。
上記の様な簡単な型の場合は、autoを利用して抽象化する必要が無いですが、
汎用的なイテレーターとしての動作を行ったりする場合や、
ラムダ式(関数)を利用する際には、特に効果を発揮するのではないでしょうか目
さて、もう一つは
新たに追加されたThreadの機能です。
昨今のプログラムではマルチスレッド化が当たり前の様になっていますが、
VisualC++11.0では標準ライブラリとして、マルチスレッド用ライブラリが入っています。
簡単に利用するだけなら

  1. #include&lt;thread&gt;
  2. #include&lt;iostream&gt;
  3. void printA()
  4. {
  5. std::cout << "スレッドA" << std::endl;
  6. }
  7. void printB()
  8. {
  9. std::cout << "スレッドB" << std::endl;
  10. }
  11. void main(void)
  12. {
  13. std::thread MultiThreadA(&printA);
  14. std::thread MultiThreadB(&printB);
  15. MultiThreadA.join();
  16. MultiThreadB.join();
  17. }

これだけの構文でマルチスレッド処理を書くことが出来ます。
ミューテックスのライブラリもちゃんと用意されていますので、
クリティカルセクションの構築も問題はないかと思います!
VisualStudio自体の新機能も含めて、紹介しきれない程の機能がありますが、
全部はとても書ききれないので、今回はこの辺りで一区切りしたいと思います。
興味が出た方は、是非一度調べてみて下さいグッド(上向き矢印)
また、今回はVisualC++11.0向けのサンプルコードを一つ用意してみました。
std::array, auto変数, for each, lambda関数, std::thread, std::mutex
上記を用いたサンプルとなっております
main.cpp
※・VisualStudio11以外のコンパイラでは、コンパイルが通りません。
 ・Visual Studio 11 Developer Preview版についてはコチラからダウンロードできます。
それではこの辺で手(パー)

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE 

S