Note

サイト
最近のコメント
 | 

2011-09-04

エラーハンドリング勉強会

の懇親会?みたいなのが無かったので(まあ私は聴講者その1に過ぎなかったのですが)、発表者のranhaさんと、nihaさんとeldeshさんを呼び出して(なんという不遜、なんという豪華メンバー)秋葉原で適当に話してきました。ありがとうございます

覚え書き。C++0xにはパターンマッチ可能な多相バリアントが追加される。

型。

std::exception_ptr var;

値をboxing。

try{
   throw 任意の型の任意の値;
}catch(...){
   var = std::current_exception();
}

追記。専用の関数が用意されているそうです。

var = std::make_exception_ptr(任意の型の任意の値);

値をパターンマッチで取り出す。

try{
  std::rethrow_exception(var);
}catch(int i){
   ...
}catch(std::string s){
   ...
}catch(...){
   ...
}

これはSMLでも使用実績のある由緒正しいテクニックらしい。

メモhttp://www.nminoru.jp/~nminoru/programming/stackoverflow_handling.htmlを穴が開くまで読む。

wraith13wraith13 2011/09/05 10:37 値を boxing するところのコードですが、それ用の関数がちゃんと標準ライブラリで提供されていまして std::make_exception_ptr() を使えば一発ですよ! (^ρ^)

FlastFlast 2011/09/05 11:46 それ自体はそれほど難しくなくて、普通にC++03の範囲でも実装することができます。

ex) http://ideone.com/f2t27
要はboxingするときに完全に型が分かっていれば、必要な関数をtype erasure等で用意することができるわけです

h_sakuraih_sakurai 2011/09/05 12:32 また欠席してしまった。うぁぁあぁあ。まぁいいや

ytqwertyytqwerty 2011/09/05 14:40 >wraith13さん
もうバリアントとしての用途が想定されているとしか思えない\(^o^)/

>Flastさん
ああいえ、Boost.Anyもありますし、できるのは知ってたんですよ。
例外に使われるのが面白いなーと。

>h_sakuraiさん
会場でh_sakuraiさん探しましたよ!残念です。

 | 
カレンダー
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 |
Connection: close