c/c++语言开发共享C++ 实现Golang里的defer

不多说了,直接贴代码。就一个hpp文件。 使用方法: 再加个 vs 代码片段 保存为defer.snippet文件,放到C:Program Files (x86)Microsoft Visual Studio2017CommunityCommon7IDEVCSnippets2052 …

不多说了,直接贴代码。就一个hpp文件。

 1 #include <functional>  2   3 #define concat_(a, b) a##b  4 #define concat(a, b) concat_(a,b)  5 /*  6 eg. defer(代码);  注意后面 一定要加上 ;  7 */  8   9 #define defer(code) deferop concat(_defer_, __line__) = [&](){code} 10  11 class deferop 12 { 13 public: 14     deferop(std::function<void()>&& fn) 15         : m_fun(std::move(fn)) 16     {} 17     ~deferop() 18     { 19         if (nullptr != m_fun) 20         { 21             m_fun(); 22         } 23     } 24  25 #if _msc_ver >= 1700    //vs2012 26     deferop(deferop &&other) = delete; 27     deferop(const deferop&) = delete; 28     void operator=(const deferop &) = delete; 29 #else 30     deferop(deferop &&other); 31     deferop(const deferop&); 32     void operator=(const deferop &); 33 #endif 34 protected: 35     std::function<void()> m_fun; 36 };

使用方法:

1 { 2   defer 3     ( 4       //代码   5     );   6 }    

再加个 vs 代码片段

 1 <?xml version="1.0" encoding="utf-8"?>  2 <codesnippets xmlns="https://schemas.microsoft.com/visualstudio/2005/codesnippet">  3     <codesnippet format="1.0.0">  4         <header>  5             <title>defer</title>  6             <shortcut>defer</shortcut>  7             <description>延迟的代码片段</description>  8             <author>bin432</author>  9             <snippettypes> 10                 <snippettype>expansion</snippettype> 11                 <snippettype>surroundswith</snippettype> 12             </snippettypes> 13         </header> 14         <snippet> 15             <declarations> 16                 <literal> 17                      18                 </literal> 19             </declarations> 20             <code language="cpp"><![cdata[defer 21     ( 22             $selected$ $end$ 23     );]]> 24             </code> 25         </snippet> 26     </codesnippet> 27 </codesnippets>

保存为defer.snippet文件,放到c:program files (x86)microsoft visual studio2017communitycommon7idevcsnippets2052visual c++目录。

这个目录可以在vs的 工具-代码片段管理器 就可以找到。

完毕!!!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/606328.html

(0)
上一篇 2021年5月13日
下一篇 2021年5月13日

精彩推荐