关于C ++使用std :: throw_with_nested

时间:2016-01-12 21:25:49

标签: c++ c++11 exception exception-handling

互联网上关于std :: throw_with_nested和C ++的信息非常少,以及如何使用它。我目前在我的所有代码中实现它,但这是不好的做法还是完全没问题?或者我应该以某种方式做不同的事情?我很想听听别人对此事的意见,谢谢。如果在这个问题上有另一个帖子,我很抱歉,但我只能找到很少。我的代码示例如下:

void GkCrypto::Crypto::generateRandomBytes(unsigned char *buf)
{
    try {
        if (1 != RAND_bytes(buf, sizeof(buf))) {
            handleErrors();
        }
    } catch (const std::exception &e) {
        std::throw_with_nested(std::runtime_error(e.what()));
    }
}

void GkCrypto::Crypto::handleErrors()
{
    unsigned long errCode;

    std::cerr << gettext("An error has occured!") << std::endl;
    while (errCode = ERR_get_error()) {
        char *err = ERR_error_string(errCode, NULL);
        std::cerr << err << std::endl;
        char *errBuf = NULL;
        std::sprintf(errBuf, gettext("An error has occured! Error:\n\n %s\n"), err);
        throw std::runtime_error(errBuf);
    }

    abort();
}

0 个答案:

没有答案