外部から安全にスレッドを中断させる方法が無い Windows では、boost::thread のinterruption において、例外を流用するというトリッキーで賢い方法を採用しています。
class BOOST_THREAD_DECL thread_interrupted
{};
std::exception から派生すると、途中で例外をキャッチした後に、thread_interrupted かどうかを調べて、例外の再送をしないといけないので面倒です。MIXIN 用との事だけど、このように例外もグループ化できれば、さぞかし便利な場面があるのかもしれない・・・という感覚だけは残ります。
で、更に進めて、階層化できた方が面白いんじゃなかろうか?って感じて、考えたのが下。
template<int LEVEL>
class level_exception : public std::nested_exception {
public:
int level() const { return LEVEL; }
bool deeper( int level ) const { return level >= LEVEL; }
};
階層で捕まえたければ
} catch( level_exception<3>& le ) {
...
}
ネストで捕まえたければ
} catch( nested_exception& ne ) {
if( ne.deeper( 3 ) ) {
...
} else {
throw;
}
}
と、こんな感じ。あんまり面白くないか…。
0 件のコメント:
コメントを投稿