¹ØÓÚfunction object
ÔÚEssential C++ ÖеÄP186Ò³¿´µ½ÒÔÏÂÒ»¶Î´úÂ룺template< typename elemType, typename Comp = less<elemType> >
class LessThanPred {
public:
LessThanPred( const elemType &val ) : _val( val ){ }
bool operator() ( const elemType &val )
{
return Comp(val, _val);
}
void val ( const elemType &newval ) { _val = newval; }
elemType val() const { return _val ; }
private:
elemType _val;
};
ÎÒ¾õµÃÆäÖÐµÄ Comp( val, _val )ºÃÏñÓÐÎÊÌ⣬ËüÃ÷Ã÷ÊÇÒ»¸öclass£¬
²¢²»ÊÇÒ»¸ö¶ÔÏó¡£ÔÚȱʡÇé¿öÏ£¬ËüÊÇstlËùÌṩµÄfunction object
:less£¬ËüµÄÒâ˼ºÃÏñÊÇÕâÑù¾Í¿ÉÒÔµ÷ÓÃCompµÄoperator(),¿ÉÒÔÕâÑù×öÂð£¿
ÎÒÈÏΪӦ¸Ã°Ñoperator( )¸ÄΪÒÔÏ´úÂ룺
Comp comp ;
return comp( val, _val );
²»ÖªµÀÕâÑù¸ÄÓÐûÓеÀÀí£¬ÇëÖ¸½Ì¡£ ´ÓÉú´æÆÚµÄ½Ç¶È£¬ÄãÕâÑù¸ÄÊÇ´íÎóµÄ¡£ ÄãµÄÏë·¨ÊǶԵÄ,Õâ¶Î´úÂëȷʵÓдíÎó
µ«ÊÇÄãµÄ¸Ä·¨ÓÐЧÂÊÎÊÌâ,ÕâÑù¾ÍÉú³ÉÁËÒ»¸öobjectÈ»ºóÔÙ·µ»Ø,ûÕâ¸ö±ØÒª
Ö±½ÓÕâÑùÐÞ¸Ä:
bool operator() ( const elemType &val )
{
return Comp()(val, _val);
} ¸ÐлÁ½Î»µÄ»Ø´ð¡£
ÎÒ¾õµÃÔÚÎÒÐ޸ĹýµÄbool operator() ( const elemType &val )°æ±¾ÖеÄÄǸö¶ÔÏócomp£¬ÊÇlocal object,ÄÇôº¯Êýoperator()Ò»Ö´ÐÐÍêËü¾Í²»´æÔÚÁË¡£ÎÒûÓзµ»Ø¸Ã¶ÔÏóµÄÒýÓûòµØÖ·£¬ÄÇôӦ¸ÃûÓÐÉú´æÆÚµÄ´íÎó¡£
¹ØÓÚ°æÖ÷µÄÐ޸ģ¬ÎÒ¾õµÃÊǸöºÜ¼ò½à¶øÇÒ²»´íµÄ·½·¨¡£ÎÒÏëÖªµÀµÄÊÇÆäÖеġ°return Comp()(val, _val);¡°ÊDz»ÊÇÏ൱ÓÚÉú³ÉÁËÒ»¸öÄäÃûµÄCompÀàÐ͵Ä
object£¬È»ºóÓÖµ÷ÓÃÁËCompµÄmember function :operator()¡£
ÒÔÉÏÊÇÎÒµÄһЩÏë·¨£¬Ï£Íû¿ÉÒԵõ½´ó¼ÒµÄÖ¸µã¡£ àÅ£¬È·ÊµÊÇ¡£
Ò³:
[1]