C ++捕获枚举值作为异常

Cha*_*hau 4 c++ exception-handling shared-libraries

我正在尝试使用已将其异常定义为的外部 C++库:

enum MY_ERRORS {
    ERR_NONE = 0,
    ERR_T1,
    ERR_T2,
};
Run Code Online (Sandbox Code Playgroud)

然后在代码中抛出如下异常:

if(...) {
    throw ERR_T1;
Run Code Online (Sandbox Code Playgroud)

作为C ++编程的新手,我会做类似的事情:

try {
    call_to_external_library();
} catch(??? err) {
    printf("An error occurred: %s\n", err);
} catch(...) {
    printf("An unexpected exception occurred.\n");
}
Run Code Online (Sandbox Code Playgroud)

如何确定抛出了什么?

utn*_*tim 6

您将需要编写代码来处理catch块中的枚举类型:

try {
    call_to_external_library();
} catch(MY_ERRORS err) {      // <------------------------ HERE
    printf("An error occurred: %s\n", err);
} catch(...) {
    printf("An unexpected exception occurred.\n");
}
Run Code Online (Sandbox Code Playgroud)


Ola*_*che 5

您必须捕获类型MY_ERRORS,然后与可能的值进行比较

try {
    call_to_external_library();
} catch(MY_ERRORS err) {
    printf("An error occurred: %s\n", err);
} catch(...) {
    printf("An unexpected exception occurred.\n");
}
Run Code Online (Sandbox Code Playgroud)