MENU閉じる

HEXA BLOG

プログラム

HEXA BLOGプログラム2012.1.16

Static_Assert

こんにちは。
寒くて布団から出るのがつらい、イワモーです晴れ
あと2か月半程したら、初めての後輩が出来ます。
頼れる先輩になれる様、今以上に頑張っていかないと、と思う今日この頃ですグッド(上向き矢印)
さて、今回はVisualC++2010から追加された機能、
Static_Assertについてお話したいと思いますひらめき
Static_Assertを簡単に説明すると、
「定数にコンパイルの条件を追加する構文」
でしょうか。
VisualC++2010以前の機能では、
例えば定数に2の倍数以外の設定をして欲しくない場合

void Hoge()
{
try
{
if(MULTIPLES_OF_TWO%2 != 0)
{
throw "Surplus check error : MULTIPLES_OF_TWO need the multiple of 2!!";
}
}
catch(std::string errorLog)
{
std::cout << errorLog.c_str() << std::endl;
}
}

この様にゲーム中で動的に定数の条件を判別する必要があります。
実際にプログラムを動作させるまで、MULTIPLES_OF_TWOは2の倍数か判定できません。
更に、2の倍数以外だった場合の例外処理等も必要になってきます。
(もちろん、人間による目視確認は出来ますがふらふら
しかし、VisualC++2010から利用できる「Static_Assert」を利用すると、
ゲームの動作中ではなく、コンパイル時に判定する事が出来ますぴかぴか(新しい)

static const int MULTIPLES_OF_TWO = 1001;
void Hoge()
{
static_assert(MULTIPLES_OF_TWO%2 == 0,
"static assert error :MULTIPLES_OF_TWO need the multiple of 2!!");
//... 以下で適当な処理
}

この場合、そもそもコンパイルエラーが発生し、プログラムを動作させる事が出来ません。
実際にプログラムを動かす必要が無く、2の倍数以外だった時の処理を書かないで済むので、
エラー処理の手間が省けますぴかぴか(新しい)
しかも、static_assertはスコープに関わらずに記述する事が出来ます目

static const int MULTIPLES_OF_TWO = 1001;
//グローバルスコープに記述する事も可能
static_assert(MULTIPLES_OF_TWO%2 == 0,
"static assert error :MULTIPLES_OF_TWO need the multiple of 2!!");
void Hoge()
{
//... MULTIPLES_OF_TWOのエラーはコンパイル時に検出できるので、
//  エラーを気にせずHogeのすべき処理に専念できる
}

この様に非常にすっきりとした、見やすいコードにする事ができます手(グー)
今回は static const int が2の倍数かを検出する例を取りましたが、
コンパイラが事前に判別出来るデータはこれ以外でも自由に利用する事が出来ます。
また、今回はコンパイルすれば、エラーの「出る」コードを.cppデータとして添付しました。
添付したプログラムにはもう一つ、
static_assertとsizeofを利用した簡単な利用例を記述しましたので、
興味がある方はご覧下さい。
main.cpp
※・VisualStudio2010以前ではstatic_assertがサポートされていないので、正常に動作しません。
※・コード中にあるMULTIPLES_OF_TWOを2の倍数にし、
  LargeClass内で定義されているMAX_DUMMY_SIZEを1000以下にするとコンパイルが通ります。
いかがでしたでしょうか?
VisualC++2010では、他にもラムダ式やauto変数、decltype型指定子など、
使い方次第では強力な機能が追加されています。
特にラムダ式とauto変数は、柔軟なプログラムの設計が可能となる機能だと思うので、
まだ触った事の無い方は、是非一度、触れてみてはと思います手(チョキ)
それでは、また手(パー)

RECRUIT

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

RECRUIT SITE