Я пишу размещенную программу на C++, которая запускает написанный пользователем C-код, скомпилированный на лету. Крайне важно, чтобы некоторые типичные исключения перехватывались из C-кода и обрабатывались/игнорировались. Для этого я вызываю код C из структурированного блока обработки исключений. Из-за характера и семантики этого блока (и откуда он вызывается) я отделил фактический вызов от его собственной функции:
template <typename ret_type, class func>
static ret_type Cstate::RunProtectedCode(func function) {
ret_type ret = 0;
__try {
ret = function();
}
__except(ExceptionHandler(GetExceptionCode(), ExceptionStatus::CSubsystem)) {
fprintf(stderr, "First chance exception in C-code.\n");
}
return ret;
}
Что хорошо работает, как и должно быть:
RunProtectedCode<int>(entry);
Но возможно ли сформировать это так, чтобы я мог вызывать функции с переменным количеством параметров - возможно, с помощью некоторого использования экзотических функторов (единственное требование, очевидно, заключается в том, что у него не может быть деструктора)? Я использую MSVC++ 2010.
[&](){foo(arg1, arg2, arg3);}
вRunProtectedCode
вместо функции, которую вы обычно передаете, и вызовfoo
выполняется, когда лямбда оценивается . - person Yakk - Adam Nevraumont   schedule 16.05.2013