Aja*_*jay 5 c++ lambda exception-handling seh c++14
众所周知,Windows SEH 不支持 C++ 异常处理机制。我们不能在单一功能中使用try和__try。这将导致编译器错误:
__try
{
try
{
MayThrowCPPException_OR_SEH();
}
catch(...)
{
}
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
}
Run Code Online (Sandbox Code Playgroud)
它将呈现:
C2713:每个函数只允许一种形式的异常处理。
大多数人不喜欢的一种选择是“Yes with SEH Exceptions ( /EHa )”编译器选项。这将有助于 C++ try/catch 处理这两个异常。我们需要将这样的函数放在单独的文件中,并且只将/EHa放在该源文件中。
另一种选择是将try(或__try) 放入一个函数中,并拥有另一个将具有__try( 或try) 的函数。
问题开始 在尝试执行上述操作时,我尝试使用 C++ lambda 来欺骗编译器。这是我所做的:
auto call_this =[]
{
MayThrowCPPException_OR_SEH();
// C++ exception handling here.
};
__try
{
call_this();
}
__except(...)
{
}
Run Code Online (Sandbox Code Playgroud)
这在 VC++ 2013 更新 5 上编译得很好。
这样做安全吗?
| 归档时间: |
|
| 查看次数: |
848 次 |
| 最近记录: |