渡された関数をtry-catch句内にラップしようとしています。これにより、スローされた例外をキャッチし、再スローする前にクリーンアップを実行できます。コンパイルのバグを再現するサンプルコードを作成しました。
#include <functional>
#include <iostream>
#include <queue>
#include <string.h>
#include <stdexcept>
using namespace std;
void foo(int a){
throw runtime_error("died");
}
template<class F,class ...Args>
void gen(F&& f,Args&&... args){
auto wrap = [](F f,Args... args){
try{
f(args...);
}catch(exception& e){
std::cout << "Caught exception" <<std::endl;
}
};
auto bound = std::bind(wrap, std::forward<F> (f),
std::forward<Args>(args)...);
bound();
}
int main()
{
gen(foo,5);
return 0;
}
ラムダ式またはバインド呼び出しのいずれかに関数ポインターを渡す方法がわからないようです。bound()の呼び出しでエラーが報告されているようです。誰かがアドバイスをしたり、私が誤解していることがあるかどうか教えてもらえますか?