Я пишу размещенную программу на C++, которая запускает написанный пользователем C-код, скомпилированный на лету. Крайне важно, чтобы определенные типичные исключения были уловлены из C-кода и обработаны/проигнорированы. Для этого я вызываю код C из блока структурированных исключений. Из-за природы и семантики этого блока (и, где это вызывается из), я отделил фактическое призвание это собственной функции:Функция шаблона, принимающая вызываемые функторы с параметрами X
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.
Есть VARIADIC шаблоны, но я боюсь, что они не поддерживаются в VS 2010. – chris
Не против обновления до VS2012, если это может быть совершенных там. Можете ли вы сделать пример кода? – Shaggi
К сожалению, VS2012 также не поддерживает вариационные шаблоны. – Xeo