enum の前方宣言
VC2010 は enum class に対応してなくてがっかり、と思いきや、enum の前方宣言が可能なようだ。
しかも
enum HOGE_RESULT; // 前方宣言ではサイズ指定子を使用できず、デフォルト(int 型サイズ)のサイズとなる
// この↓で HOGE_RESULT を戻り値にするような関数を用いる
class Hogehoge
{
HOGE_RESULT testHoge(void);
};
#inlucde "hogeUtility.h"
#inlucde "hogehoge.h"
HOGE_RESULT testHoge(void)
{
return HOGE_RESULT_OK;
}
typedef enum HOGE_RESULT : int // ここのサイズ指定子はデフォルトと同じ必要がある
{
HOGE_RESULT_OK = 0,
HOGE_RESULT_NG = -1,
}
で前方宣言が完了するお手軽さ。
※サイズ指定子を使う場合は 32 バイトじゃないと別定義扱いになるので注意
調べてみたら 2005 の時点で対応してたらしい。……全然知らなかったのでショック。
で、↑のやり方は VC の独自拡張だけど、他のコンパイラも対応してたりするらしい。
コンパイラの仕様関連ももっと勉強せんとあかんなぁ……。