创建自己的异常(2种方法)C
Creating own exceptions (2 ways) c++
我被要求通过从标准库std :: logic_error异常来创建自定义。首先,我试图通过这本书做事:
class CustomException: public std::logic_error
{
virtual const char* what() const throw()
{
return "Exception raised";
}
};
但后来我的同事也得到了这项任务,向我展示了另一种处理此问题的方法:
class CustomException:public std::logic_error {
using std::logic_error::logic_error;
public:
const static std::string ExceptionText;
};
除了需要以不同的方式传递的信息之外,这两个事实的主要区别是什么?具体来说,我不知道使用语句在第二个选项中做什么。
它们并不完全相同。
在您的同事版本中:
// This does nothing.
// Delete it and the rest of the class is unchanged.
const static std::string ExceptionText;
class CustomException:public std::logic_error {
// This line basically inherits the base class constructor(s)
// Which allows you to construct your exception like others.
using std::logic_error::logic_error;
};
您可以将上述视为:
class CustomException: public std::logic_error {
public:
CustomException(std::string const& emsg)
: logic_error(emsg)
{}
CustomException(char const* emsg)
: logic_error(emsg)
{}
// And a couple of more
};
注意:基类上的what()
功能将返回对您在开始时传递的消息的引用。
另一种选择(如果要保留原始消息)。
class CustomException: public std::logic_error
{
public:
CustomException()
: logic_error("Exception raised")
{}
// The default "what()" will return the above message.
};
相关文章:
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有一种方法可以在编译时获得作用域类名
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 一种在C++中读取TXT配置文件的简单方法
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 寻找一种更好的方法来表示无符号字符数组
- 哪种方法更好,性能明智
- 有没有一种通用的方法来实现不变量
- 两种访问I2C总线的方法有什么区别?
- 创建临时文件的多种方法:每种方法背后的情况是什么?