前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.0

9.5. アプリケーションクラス(基礎編)

レスポンダシステムを利用するすべての BREW アプレットは SFYApplication クラスを継承し、ユーザー定義アプリケーションクラスを実装します。

SFYApplication クラスはレスポンダではなく、デフォルトの配信エンジン描画エンジンルートを保持するクラスです。

SFYApplication クラスに対するレスポンダ関連の操作はデフォルトのルートに委譲され、 SFYApplication クラスに用意された API の範囲内でアプリケーションクラスはレスポンダのように振舞うことができます。

抽象アプリケーションクラス(SFYApplication)はカスタマイズされたユーザー定義アプリケーションクラスを作成するための起点となります。

表 9.5. 抽象アプリケーションクラスの種類

クラス名 解説
SFYApplication アプリケーションクラスを表す抽象クラスです。

9.5.1. アプリケーションクラスを表す抽象クラス[SFYApplication]

SFYApplication クラスは、各種アプリケーションクラスを実装するための起点となります。

このクラスは、デフォルトの配信エンジン描画エンジンルートを実装し、 いくつかの仮想関数のデフォルトの動作も実装します。

表 9.6. 仮想関数名とデフォルトの動作

仮想関数名 デフォルトの動作 オーバーライド
SFYApplication::HandleEvent 配信エンジンを起動し、イベントが処理された場合はさらに描画エンジンを起動※1 任意
SFYApplication::HandleRender 描画エンジンを起動し、画面を強制的に再描画※1 任意
SFCApplication::HandleError 任意
[Note] 注釈

※1.配信エンジンや描画エンジンの起動中にメモリ不足などのエラーが発生するなど致命的なエラーが発生した場合は SFCApplication::HandleError 関数を起動します。

以下にユーザー定義アプリケーションクラスを作成するときに最低限必要なコードを示します。

例 9.31. 宣言

SFMTYPEDEFCLASS(USRApplication)
class USRApplication : public SFYApplication {
    SFMSEALCOPY(USRApplication)
public:
    static SFCInvokerPtr Factory(Void);
private:
    explicit USRApplication(Void) static_throws;
    virtual ~USRApplication(Void);
};

例 9.32. 実装

// ブートローダ : BREW アプレットで最初に実行される関数
SFCApplet::FactorySPP SFCApplet::Boot(AEECLSID id, SFXAnsiStringPtr license)
{
    // ここにライセンスコードを記述する
    *license = "heap://";

    return (id == AEECLSID_USRAPPLICATION) ? (&USRApplication::Factory) : (null);
}

// ファクトリ関数 : ユーザー定義アプリケーションクラスのインスタンスを生成する関数
SFCInvokerPtr USRApplication::Factory(Void)
{
    return ::new USRApplication;
}

// コンストラクタ
USRApplication::USRApplication(Void) static_throws
{
    if (static_try()) {

        // 初期化処理を記述する
    }
}

// デストラクタ
USRApplication::~USRApplication(Void)
{
    // 終了処理を記述する
}
[Caution] コンストラクタやデストラクタ内の return 文

通常、C++ではコンストラクタやデストラクタでは return 文を記述しません。

GCC(将来的にサポート予定)を使う場合、コンストラクタやデストラクタ内で return 文を記述すると、 特定の継承関係になっているときにコンパイラがフリーズするバグが確認されています。