或者,"俄罗斯人如何抛出异常?"
std :: exception的定义是:
namespace std {
class exception {
public:
exception() throw();
exception(const exception&) throw();
exception& operator=(const exception&) throw();
virtual ~exception() throw();
virtual const char* what() const throw();
};
}
Run Code Online (Sandbox Code Playgroud)
一个思想的流行学设计异常层次结构是从的std ::例外得出:
通常,最好抛出对象,而不是内置函数.如果可能,您应该抛出从(最终)从std :: exception类派生的类的实例.通过使您的异常类从标准异常基类继承(最终),您可以让您的用户更轻松(他们可以选择通过std :: exception捕获大部分内容),而且您可能正在为他们提供更多信息(例如,您的特定异常可能是std :: runtime_error或其他任何内容的改进).std :: runtime_error或其他).
但是面对Unicode,似乎不可能设计一个能够实现以下两个目的的异常层次结构:
使用可以使用Unicode字符串构造的异常类非常简单.但标准规定what()必须返回一个const char*,因此在某些时候输入字符串必须转换为ASCII.无论是在构造时完成还是调用what()(如果源字符串使用的字符不能用7位ASCII表示),可能无法在不丢失保真度的情况下格式化消息.
如何设计一个异常层次结构,它结合了std :: exception派生类与无损Unicode诊断的无缝集成?