C++11增加了Lambda(匿名)函数,在实际使用中发现对匿名函数命名是很有必要的(增强代码阅读性)。
本文介绍一种优雅的方法实现对匿名函数的命名。
我发现,任何增强代码阅读性而且又不违反编译器规则的方式都是定义空定义,比如:
/** * MFC框架内标识消息处理函数的宏,没有实际意义, * 但是一眼就能看出这是消息处理函数。 */ #ifndef afx_msg #define afx_msg // intentional placeholder #endif
/** * IN 和 OUT 宏用于标识函数参数的传入方向,有些语言(C#) * 直接支持 in 和 out 关键字,增强阅读性。 */ #ifndef IN#define IN#endif #ifndef OUT#define OUT#endif
沿着这条思路很容易得出为匿名函数命名的方法,定义一个有意义的空宏,如下:
/** * 定义匿名函数的名称 */#define $(NAME)
选择$这个符号是因为它足够简洁,当然不排除某些JavaScript框架的影响。接下来你的匿名函数就可以这样来使用了。
if ([&]$(TestIfDigitalZoom)()->bool{ if (type == RecalcRect_FitFull || type == RecalcRect_FitBest) { return true; } if (iZoomZt > 20 || iZoomZt < 0) { return false; } /* 变化后的缩放,是否为机器缩放 */ if (fZoom * RectCalcor::_ZoomKey <= 1.0f && fZoom >= imgSize.Width * 1.0f / capSize.Width * RectCalcor::_ZoomKey) { return true; } else { return false; } }()){}
怎么样,是不是很酷呢?
时间: 2024-10-07 22:07:12