Tôi đang phát triển một api C cho một số chức năng được viết bằng C++ và tôi muốn đảm bảo rằng không có ngoại lệ nào được truyền từ bất kỳ hàm C được xuất nào.Sử dụng lại mã trong xử lý ngoại lệ
Cách đơn giản để làm điều đó là đảm bảo mỗi chức năng xuất khẩu được chứa trong một:
try {
// Do the actual code
} catch (...) {
return ERROR_UNHANDLED_EXCEPTION;
}
Hãy nói rằng tôi biết một ngoại lệ mà thường bị bỏ lỡ trong C++ là std :: bad_alloc và tôi muốn để đối xử với nó đặc biệt tôi muốn viết một cái gì đó như thế này thay vì:
try {
// Run the actual code
} catch (std::bad_alloc& e) {
return ERROR_BAD_ALLOC;
} catch (...) {
return ERROR_UNHANDLED_EXCEPTION;
}
có thể phân hủy này trong một số cách thông minh để tôi trên toàn cầu có thể điều trị một số lỗi khác nhau mà không cần thêm một lệnh catch mới cho xử lý ngoại lệ xung quanh mỗi chức năng xuất khẩu?
Tôi biết rằng điều này có thể giải quyết bằng cách sử dụng bộ tiền xử lý, nhưng trước khi đi xuống con đường đó, tôi chắc chắn rằng không có cách nào khác để làm điều đó.
+1: Ý tưởng hay :-) –
Làm việc hoàn hảo. Cảm ơn! – Laserallan
Trong mã thực không quên bắt ngoại lệ bằng cách tham khảo: bắt (std :: bad_alloc &) – Jem