読者です 読者をやめる 読者になる 読者になる

main()を隠蔽しない


小ネタのつづき.
要は main()より前に,実装したクラスのインスタンスが渡せれば良いだけなので
前記みたいなboot()関数を作らないでも,静的コンストラクタ内でnewして,
基底クラスのコンストラクタで自分のポインタを渡せば良いっぽい.

//--------------------------------------------------
// アプリケーションの基底クラス
//--------------------------------------------------
abstract class CMainApp 
{
public:
    static CMainApp s_MainInstance;

public:
    // 基底クラスのコンストラクタでインスタンスのポインタを
    // static メンバとして保存しておく.
    void this()
    {
        s_MainInstance = this;
    }
    
    int Body()
    {
        return 0;
    }
};


//--------------------------------------------------
// main 関数
//--------------------------------------------------
int main(char argv[][])
{
    return CMainApp.s_MainInstance.Body();
}


//--------------------------------------------------
// ここから実装
//--------------------------------------------------
class CApp : public CMainApp
{
public:
    // 静的コンストラクタ内でインスタンスをただ生成する.
    static this()
    {
        new CApp;
    }
    
    int Body()
    {
         ...(メインプログラム)...
    }
};

"new CApp" と書くだけで,ちゃんと動いてくれるみたい.
なんだけど,さすがにただ"new CApp"とだけしか書いて無いのは気持ち悪い.
MFCみたいにイベントドリブンのプログラムなら,main()の隠蔽って意味あるけど,
ゲームごときなら,main()位ちゃんと書いて,何をやってるのか,
ある程度明示した方が良いのかもしれない.