在Java中,Object
类是所有类的基类。 C ++中是否还有这样的类?
我对这个问题的动机是:
try
{
if (something) throw int(a);
if (something) throw char(b);
if (something) throw float(c);
}
catch(...)
{
handle
}
除此之外,还有其他方法可以使用单个catch块处理所有这些异常吗?
答案 0 :(得分:6)
C ++中没有通用的基类。
异常类通常应来自android.app.Fragment
,以便std::exception
可以使用。
catch(const std::exception&)
捕获任何异常对象类型(包括基本类型)。可以使用catch(...)
catch
块内重新抛出
throw;
还可以在try
{
if (something) throw int(a);
if (something) throw char(b);
if (something) throw float(c);
}
catch(...)
{
if(stillFailed) throw; // throws the same exception again
}
块内使用std::exception_ptr
获取表示抛出对象(未知类型)的std::current_exception()
对象。然后可以将其与其他catch(...)
个对象进行相等性比较,或者使用std::exception_ptr
从另一个函数中重新进行比较。见http://en.cppreference.com/w/cpp/header/exception。无法直接访问异常对象,因为其类型未知。
答案 1 :(得分:1)
此类案例的最通用类型是std::string
(毕竟,即使最复杂的程序也只是字符数组)。
将对象编码为文本格式,并在处理方面解析/解释它。
template<class T>
std::string toString(const T& x);
try
{
if (something) throw toString(int(a));
if (something) throw toString(char(b));
if (something) throw toString(float(c));
}
catch(const std::string& ex)
{
decode and handle
}
但是,如果您愿意采用这种方法,那么C ++就不适合进行编程 - 更好地转换为面向文本或动态语言。
答案 2 :(得分:0)
不,还有其他方法可以使用单个catch块来处理所有这些异常。
需要不同的catch块来处理不同的数据类型throw。 喜欢 对于int catch(int m)
表示char (char m)
等