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

时间:2014-01-06 13:33:33

标签: c++ exception-handling shared-libraries

我正在尝试使用外部 C++库,该库已将其例外定义为:

enum MY_ERRORS {
    ERR_NONE = 0,
    ERR_T1,
    ERR_T2,
};

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

if(...) {
    throw ERR_T1;

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

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

如何确定投掷内容?

2 个答案:

答案 0 :(得分:5)

您需要编写代码来处理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");
}

答案 1 :(得分:4)

您必须捕获类型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");
}