设计std::exception
以创建新的异常类型的原因是什么?要创建一个派生类来覆盖virtual what()
函数,而不是创建一个可以容纳异常的类。字符串并返回到what()
上?
class exception
{
std::string msg;
public:
exception(std::string _msg) : msg(_msg) {}
void set(std::string _msg) { msg = _msg; }
std:string what() { return msg; }
};
每个错误(bad_alloc, logical_error ...)
可能是该类的一个实例,而不是派生类。
使用虚拟函数和继承而不是上述方法的原因是什么?
答案 0 :(得分:1)
catch块不能作为模板,这意味着必须指定异常隐式可转换的类型。
具有一个用于异常(function () {
return new Promise((resolve, reject) => {
try {
fetch(URL, { method: METHOD, body: BODY })
.then((res) => res.json())
.then((json) => {
resolve(json);
})
.catch((res) => {
reject(res);
})
} catch (exception) {
reject(exception);
}
});
}
)的接口,可以捕获任何异常并获得错误消息,而无需了解或关心异常的真实类型。但是如果用户只想捕获那些异常,还可以让用户选择更精确的类型,例如std::exception
。
答案 1 :(得分:0)
两者都可以使用,而且效果很好。标准库使用这种方法对异常进行不同的“分类”。