加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在单个函数中混合’__try’和’try’ – 通过Lambda

发布时间:2020-12-16 07:13:26 所属栏目:百科 来源:网络整理
导读:众所周知,Windows SEH不支持C异常处理机制.我们不能在单个函数中使用try和__try.这将导致编译器错误: __try{ try { MayThrowCPPException_OR_SEH(); } catch(...) { }}__except(EXCEPTION_EXECUTE_HANDLER){} 它将呈现: C2713: Only one form of exception
众所周知,Windows SEH不支持C异常处理机制.我们不能在单个函数中使用try和__try.这将导致编译器错误:

__try
{
   try
   {
       MayThrowCPPException_OR_SEH();
   }
   catch(...)
   {
   }
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
}

它将呈现:

C2713: Only one form of exception handling permitted per function.

大多数人不喜欢的一个选项是“是的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(...)
{
}

这在VC 2013更新5上编译好.

这样做是否安全?

解决方法

是的,这是安全的. lambda主体只是一个未命名的lambda类型的operator()方法.此方法具有C异常处理程序.外部函数具有SEH处理程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读