gpt4 book ai didi

c++ - 自动为自定义异常添加前缀

转载 作者:太空狗 更新时间:2023-10-29 22:58:58 25 4
gpt4 key购买 nike

当涉及到 C++ std:exception 处理时,我很不确定。这是我在网上找到的一些示例代码,我目前正在使用。

class MyBaseException : public std::exception
{
public:

explicit MyBaseException(const std::string & message)
: m_Base(message.c_cstr()) {}

explicit MyBaseException(const char *message)
: m_Base(message) {}

virtual ~MyBaseException() throw () {}

protected:
typedef std::exception m_Base;
};

class MyDerivedException : public MyBaseException
{
public:

explicit MyDerivedException (const std::string & message)
: m_Base(message.c_cstr()) {}

explicit MyDerivedException (const char *message)
: m_Base(message) {}

virtual ~MyDerivedException () throw () {}

protected:
typedef MyBaseException m_Base;
};

现在,我想做的是自动为以下方案引发的每个异常添加前缀。

某些代码会引发 MyDerivedException 异常,具体如下:“原始异常消息”

当 MyDerivedException 收到“original_exception_message”时,我想在其前面加上:“引发派生异常:”

当 MyBaseException 收到 MyDerivedException 异常时,我想在它前面加上:“引发基本异常:”

这样最终的消息看起来像这样:

“引发基础异常:引发派生异常:original_exception_message”

我总觉得我会收到关于这个问题的各种令人讨厌的回复,关于糟糕的概念和糟糕的做法......但我并不声称自己是专家。

请注意,前置消息实际上并非如此。他们会提供更多信息。

提前致谢。

最佳答案

#include <iostream>
#include <exception>

class MyBaseException : public std::exception
{
public:
explicit MyBaseException(const std::string & message)
: m_message("Base Exception Raised: " + message) {}

virtual const char* what() const throw ()
{
return m_message.c_str();
}

private:
const std::string m_message;
};

class MyDerivedException : public MyBaseException
{
public:

explicit MyDerivedException (const std::string& message)
: MyBaseException("Derived Exception Raised: " + message) {}

};

int main()
{
try
{
throw MyDerivedException("derived");
}
catch(std::exception const& e)
{
std::cout << e.what();
}
return 0;
}

并阅读此链接 http://en.cppreference.com/w/cpp/error/exception

关于c++ - 自动为自定义异常添加前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38399621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com