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

6.3. エラー処理

エラー処理は、標準 C++ 言語の例外構文に似た「擬似 catch-throw 構文」を使います。

エラー値の型は SFCErrorです。

表 6.4. エラー処理の関数

関数 意味
static_catch エラーを取得します。
static_try エラーが発生したかどうかを取得します。
static_throw エラーを設定します。
[Note] static_throws マクロ

メンバ関数宣言の最後に記述される static_throws マクロ は、 開発者にその関数はエラーを搬出する可能性があることを明示するためのものです。

static_throws マクロはコンパイル時に削除されますので、省略しても実行時に影響はおよびません。

Visual C++ 6.0 では、このマクロを使うと ClassView にクラスリストが表示されない現象が発生する可能性があります。

このとき、ClassView にクラスリストを表示するには、このマクロを削除するか、あるいはヘッダファイルの先頭の方で

#define static_throws

と記述します。

例 6.1. エラー処理

class MyApp : public SFCApplication {
  public:
    Void SubFunc(Void) static_throws;       // SubFunc は static_throws によりエラーを投げる
                                            
    Void MainFunc(Void);
    ...
};

Void SubFunc(Void) static_throws            // SubFunc は static_throws によりエラーを投げる
                                            
{
    if (static_try()) {                     // 現在のエラーの有無をチェックする
        
        // エラーは発生していない
        // オブジェクトを生成する
        XXXObjectPtr object = new XXXObject();
        if (object == null) {               // オブジェクトの生成に失敗したとき

            static_throw(SFERR_NO_MEMORY);  // メモリ不足エラー ( SFERR_NO_MEMORY ) を投げる

            return;                         // static_throw は自動的に return しないので必要
        }
    }
    ...
}

Void MainFunc(Void)
{
    ...
    SubFunc();
    switch (static_catch()) {
        // エラー内容に応じた処理
        case SFERR_NO_MEMORY:               // メモリ不足
            ...
        case SFERR_NO_ERROR:                // エラーが発生していない
            ...
    }
    ...
}