SlideShare a Scribd company logo
1 of 10
Download to read offline
exception_ptr


H.23/09/04
Egtra
イントロ
int main() {
  int result;
  std::thread t(f, ref(result));
  // ……
  t.join();
  cout << result << endl;
}
イントロ
void f(int& result) {
  try {
    作業
  } catch (...) {
    // どうする?
  }
}
案1
void f(int& result) {
  try {
  } catch (std::exception const& e) {
    cerr << e.what() << endl;
  }
}
案2
void f(int& result, std::exception& re) {
  try {
  } catch (std::exception const& e) {
    re = e;
  }
}
案2
int result; exception e;
std::thread t(f, ref(result), ref(e));

t.join();
cerr << e.what() << endl;
案3 exception_ptr
void f(int& result, exception_ptr& re) {
  try {
  } catch (...) {
    re = current_exception();
  }
}
案3 exception_ptr
int result; exception_ptr e;
thread t(f, ref(result), ref(e));
t.join();

try {rethrow_exception(e);}
catch (std::exception const& e) {...}
案3 exception_ptr
int result; exception_ptr e;
thread t(f, ref(result), ref(e));
t.join();

try {rethrow_exception(e);}
catch (std::exception const& e) {...}
catch (MyException const& e) {...}
それ、<future>で
• 参考:
 – http://d.hatena.ne.jp/melpon/
   20081205/1228482683

More Related Content

More from egtra

Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALegtra
 
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングエクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングegtra
 
Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)egtra
 
Casablanca
CasablancaCasablanca
Casablancaegtra
 
Firefox拡張機能を始める
Firefox拡張機能を始めるFirefox拡張機能を始める
Firefox拡張機能を始めるegtra
 
ATLに見る魔術
ATLに見る魔術ATLに見る魔術
ATLに見る魔術egtra
 
再変換 (K2Editor)
再変換 (K2Editor)再変換 (K2Editor)
再変換 (K2Editor)egtra
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編egtra
 
char32_tとXpressiveと
char32_tとXpressiveとchar32_tとXpressiveと
char32_tとXpressiveとegtra
 
Boost.Range入門
Boost.Range入門Boost.Range入門
Boost.Range入門egtra
 
Boost.Graph入門
Boost.Graph入門Boost.Graph入門
Boost.Graph入門egtra
 

More from egtra (11)

Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
 
エクストリームC++11/14プログラミング
エクストリームC++11/14プログラミングエクストリームC++11/14プログラミング
エクストリームC++11/14プログラミング
 
Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)Visual C++ 2015の紹介(C++11/14的に)
Visual C++ 2015の紹介(C++11/14的に)
 
Casablanca
CasablancaCasablanca
Casablanca
 
Firefox拡張機能を始める
Firefox拡張機能を始めるFirefox拡張機能を始める
Firefox拡張機能を始める
 
ATLに見る魔術
ATLに見る魔術ATLに見る魔術
ATLに見る魔術
 
再変換 (K2Editor)
再変換 (K2Editor)再変換 (K2Editor)
再変換 (K2Editor)
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編
 
char32_tとXpressiveと
char32_tとXpressiveとchar32_tとXpressiveと
char32_tとXpressiveと
 
Boost.Range入門
Boost.Range入門Boost.Range入門
Boost.Range入門
 
Boost.Graph入門
Boost.Graph入門Boost.Graph入門
Boost.Graph入門
 

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