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

例外が使えない環境用のマクロ

C++

boost/detail/no_exceptions_support.hpp
に、try/catchを例外が使えない環境でif/elseに置き換えてくれるマクロがあります。
(detail以下なので注意)


ヘッダに説明が書かれていますが、以下のように書くと

void foo() {
    BOOST_TRY {
        ...
    } BOOST_CATCH(const std::bad_alloc&) {
        ...
        BOOST_RETHROW
    } BOOST_CATCH(const std::exception& e) {
        ...
    }
    BOOST_CATCH_END
}

例外が使える環境では以下のように置き換えられ、

void foo() {
    { try {
        ...
    } catch (const std::bad_alloc&) {
        ...
        throw;
    } catch (const std::exception& e) {
        ...
    }
    }
}

例外が使えない環境では以下のようにif/elseに置き換えられます。

void foo() {
    { if(true) {
        ...
    } else if (false) {
        ...
    } else if (false)  {
        ...
    }
    }
}