如何在C ++中模拟内部异常 [英] How to simulate inner exception in C++
问题描述
基本上我想模拟.NET Exception.InnerException在C ++。我想捕获从底层的异常,并用另一个异常包装它,并再次抛出到上层。这里的问题是我不知道如何将捕获的异常包装在另一个异常中。
Basically I want to simulate .NET Exception.InnerException in C++. I want to catch exception from bottom layer and wrap it with another exception and throw again to upper layer. The problem here is I don't know how to wrap the catched exception inside another exception.
struct base_exception : public std::exception
{
std::exception& InnerException;
base_exception() : InnerException(???) { } // <---- what to initialize with
base_exception(std::exception& innerException) : InnerException(innerException) { }
};
struct func1_exception : public base_exception
{
const char* what() const throw()
{
return "func1 exception";
}
};
struct func2_exception : public base_exception
{
const char* what() const throw()
{
return "func2 exception";
}
};
void func2()
{
throw func2_exception();
}
void func1()
{
try
{
func2();
}
catch(std::exception& e)
{
throw func2_exception(e); // <--- is this correct? will the temporary object will be alive?
}
}
int main(void)
{
try
{
func1();
}
catch(base_exception& e)
{
std::cout << "Got exception" << std::endl;
std::cout << e.what();
std::cout << "InnerException" << std::endl;
std::cout << e.InnerException.what(); // <---- how to make sure it has inner exception ?
}
}
在上面的代码清单中,我不知道如何当没有内部异常时,初始化InnerException成员。我也不知道从func1抛出的临时对象是否会生存,即使在func2 throw?
In the above code listing I am not sure how to initialize the "InnerException" member when there is no inner exception. Also I am not sure whether the temporary object that is thrown from func1 will survive even after func2 throw?
推荐答案
请查看提升异常的替代解决方案到包装。
You should also take a look at boost exception for an alternative solution to wrapping.
这篇关于如何在C ++中模拟内部异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!