不多说了,直接贴代码。就一个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