C++ get description of an exception caught in catch(…) block

前端 未结 6 1902
感动是毒
感动是毒 2020-12-03 10:07

can I get description of an exception caught by

catch(...)

block? something like .what() of std::exception.

6条回答
  •  北荒
    北荒 (楼主)
    2020-12-03 10:38

    There is one trick you might be able to use:

    catch(...) {
        handle_exception();
    }
    
    void handle_exception() {
        try {
            throw;
        } catch (const std::exception &e) {
            std::cout << e.what() << "\n";
        } catch (const int i) {
            std::cout << i << "\n";
        } catch (const long l) {
            std::cout << l << "\n";
        } catch (const char *p) {
            std::cout << p << "\n";
        } catch (...) {
            std::cout << "nope, sorry, I really have no clue what that is\n";
        }
    

    and so on, for as many different types as you think might be thrown. If you really know nothing about what might be thrown then even that second-to-last one is wrong, because somebody might throw a char* that doesn't point to a nul-terminated string.

    It's generally a bad idea to throw anything that isn't a std::exception or derived class. The reason std::exception exists is to allow everybody to throw and catch objects that they can do something useful with. In a toy program where you just want to get out of there and can't even be bothered to include a standard header, OK, maybe throw an int or a string literal. I don't think I'd make that part of a formal interface. Any exceptions you throw are part of your formal interface, even if you somehow forgot to document them.

提交回复
热议问题