Я реализую обратные вызовы в С++, которые будут вызываться из обычного кода C. Моя функция main() уже есть С++, но код C будет отвечать за создание потоков, которые в конечном итоге вызовут мои обратные вызовы.
Сейчас мои обратные вызовы выглядят как
int handle_foo(void *userdata) {
try {
MyCPPClass *obj = static_cast<MyCPPClass *>(userdata);
obj->doStuff();
return 0; // no error
} catch(...) {
LogError("doStuff failed");
return -1; // error
}
}
Это работает нормально, но мне кажется странным. Кроме того, я теряю некоторые полезные функции, такие как возможность узнать, что было выбрано (без добавления большого количества дополнительных операторов catch
для каждого из моих обратных вызовов).
Является try {} catch(...) {}
здесь разумным, или есть лучший способ написать мои C-обратные вызовы?