C++ 使用VC+;中的try/catch了解异常类型+;

C++ 使用VC+;中的try/catch了解异常类型+;,c++,visual-c++,exception,exception-handling,try-catch,C++,Visual C++,Exception,Exception Handling,Try Catch,可能重复: 我知道C#中的异常处理: 但是,我想在VC++中实现同样的功能(在VS2008上)。 在VC++中,我们如何捕获在“测试块”中出现的类型的异常,因为在VC++中没有包的概念? < P>对于C++中的所有异常,没有一个基类,所以唯一的选项是指定要处理的< /P> try { } catch (const std::exception& e) { } catch (const my_base_exception& e) { } catch (const some_lib

可能重复:

我知道C#中的异常处理:

但是,我想在VC++中实现同样的功能(在VS2008上)。
在VC++<强>中,我们如何捕获在“测试块”中出现的<强>类型的异常,因为在VC++中没有包的概念?

< P>对于C++中的所有异常,没有一个基类,所以唯一的选项是指定要处理的< /P>
try
{
}
catch (const std::exception& e)
{
}
catch (const my_base_exception& e)
{
}
catch (const some_library_base_exception& e)
{
}
catch (...)
{
// ups something unknown
}
请记住,如果您的
my_base\u异常
是从
std::exception
派生的,它将被
catch(const std::exception&e)
截获,因此如果是这样的话,请交换这两个捕获。同样的,对于C++,你通常会指定<>代码> catch /c>可以捕获的类型,而不是检查类型。

如果要记录捕获的
std::exception
的最派生类型,则可以通过
typeid
获取该信息,因为
std::exception
是多态类型

如果您对记录标准异常类型层次结构之外的异常类型感兴趣,那么一个好方法是进行一般捕获(使用
)并调用一个通用的rethrower函数,该函数知道可能的非标准异常和rethrows,并
捕获这些异常和rethrows。这集中了逻辑。但最有可能的问题不是关于这种先进的和罕见的技术(只与使用非良好的库相关),而是一个简单的误解,关于C++中的异常处理,答案是,指定您准备捕获的相关类型,在每个
catch
子句中。

相同的问题:希望有帮助。
try
{
}
catch (const std::exception& e)
{
}
catch (const my_base_exception& e)
{
}
catch (const some_library_base_exception& e)
{
}
catch (...)
{
// ups something unknown
}