はじめに
マネージド言語の発展ペースに比べると、C++言語の変化は誠に遅々たるものに見えますが、C++での新機能の開発は着実なペースで以前と同様に続いており、全体的に見ればこの点こそがC++という言語の特徴と言えます。Visual Basicのような、トレンドに合わせてその姿形を変えていく言語と比べると、長い目で見ての安定性はC++の大きな特長の1つです。C++では、変更は安定したペースで、かつ十分に精査されたうえで起こります。現在進行中のC++言語への拡張は「C++0x Standard」と呼ばれており、この拡張では、ここ10年間に標準として承認された事項を反映しています。Technical Report 1(TR1)は、こうした標準化プロセスでの1つの中間段階であり、最終的には標準の一部になると見込まれる新機能を数多く盛り込んでいます。
このMFC機能パックとそのインストールについては以前の記事である程度触れたので、そこで述べた説明やヒントは、ここでは繰り返さないでおきます。
STLの配列
これまでのSTLコンテナのコレクションに欠けていた最も重要な機能の1つは、固定長の配列です。Cスタイルの配列や、vector、サードパーティーのライブラリを使用するなど、代替となる手法は数多くありますが、一般のC++プログラマのニーズを考えれば、固定長配列をSTLに追加することは必然です。今回新たに追加された配列型コレクションの使い方は非常にシンプルです。配列の長さをテンプレートのパラメータとして指定すると、そのコレクションはSTLのvectorコレクションと大変よく似た動きをするようになります。
#include <array> #include <iostream> #include <string> std::tr1::array<int, 3> intArray = {4, 8, 10}; std::tr1::array<int, 3> intArray2 = {4, 8}; intArray2[2] = 10; std::cout << ((intArray == intArray2)? std::string("Arrays are equal"): std::string("Arrays aren't equal") ); std::cout << std::endl; for (std::tr1::array<int, 3>::const_iterator it = intArray2.begin(); it != intArray2.end(); ++it) { std::cout << " " << *it; }
このサンプルコードには注目すべき点がいくつかあります。配列の全内容または一部の内容はイニシャライザで指定することができ、コンパイラは、イニシャライザの型と長さをチェックして、イニシャライザが配列の定義に従っていることを確認できます。==演算子もオーバーライドされており、配列内の各要素の値同士を比較できます。また、イテレータは他のSTLコレクションとまったく同じように機能します。さらに注目すべき点は、C++ 2008機能パックの一部としてリリースされるTR1拡張はすべてstd::tr1名前空間に含まれているということです。