enumハック

http://www.geocities.jp/ky_webid/cpp/language/020.html

以下のような処理を考えます。

class CSample {
public:
    static const int SIZE = 100;
    int m_array[SIZE];
};
const int CSample::SIZE;

SIZE変数を静的なconstメンバ変数として宣言しています。

しかしこの書き方はVC6.0などの古いコンパイラではコンパイルエラーになるみたいです。

SIZE変数はクラス内部では宣言しかできないのだそうです。

なので

#include <iostream>

class CSample {
public:
    static const int SIZE;
};
const int CSample::SIZE = 100;

と書かなければなりません。ですがそうすると、m_arrayを宣言する際にまだSIZE変数にには値が定義されていないのでこれまたエラーとなります。

そこで登場するのがenumハックというものです。

class CSample {
public:
    enum { SIZE = 100 };
    int m_array[SIZE];
};

enumが静的const変数であることを利用して定義してしまうというやり方です。

よく知らないでこれだけ見たらなんでこんな書き方してるんだろうと思うところですが、こういった事情があったわけなんですね。

ちなみにVC6.0等の古いコンパイラは無視するということであれば最初に提示した例で書くほうがいいと思います。