派生自std :: runtime_error:如何访问基类信息?

时间:2017-01-21 19:45:34

标签: c++ exception inheritance

首先,我确实在google上进行了快速搜索,但没有一个能解释我的搜索内容。

编辑:例如,我看了here

std::runtime_error是一个异常类,表示在运行时发生的错误。除非我弄错了,否则它没有默认构造函数(我在尝试从中导出而没有显式调用父构造函数时出错)但它确实有字符串(-ish)构造函数,允许您指定消息。 / p>

我的问题是如何在成员函数中访问该消息,例如what()std::exception中的虚函数)?父类中没有定义getMessage()或类似的函数,如果碰巧是我重写的函数,则调用what()是没用的。

我正在使用Visual Studio Community 2015,因此特定于编译器的方法是可以的,但我更喜欢便携式解决方案。

1 个答案:

答案 0 :(得分:2)

指定您希望基类的what而不是您自己的:

const char* what() const noexcept override {
    auto base_msg = std::runtime_error::what();
    return /* something using base_msg */;
}

但是,在whatconst保持真实并且还返回指向将比函数调用更长的数据的指针时,您可以真正做到这一点。您可以在构造函数中进行格式化并返回类包含的缓冲区。请注意,在尝试抛出异常时,您想要的最后一件事是另一个错误。