LinuxÒÁµéÔ°ÂÛ̳'s Archiver

feelingback ·¢±íÓÚ 2003-7-12 15:12

¹ØÓÚ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 );
²»ÖªµÀÕâÑù¸ÄÓÐûÓеÀÀí£¬ÇëÖ¸½Ì¡£

flag ·¢±íÓÚ 2003-7-17 09:02

´ÓÉú´æÆÚµÄ½Ç¶È£¬ÄãÕâÑù¸ÄÊÇ´íÎóµÄ¡£

DarkSpy ·¢±íÓÚ 2003-7-17 10:02

ÄãµÄÏë·¨ÊǶԵÄ,Õâ¶Î´úÂëȷʵÓдíÎó
µ«ÊÇÄãµÄ¸Ä·¨ÓÐЧÂÊÎÊÌâ,ÕâÑù¾ÍÉú³ÉÁËÒ»¸öobjectÈ»ºóÔÙ·µ»Ø,ûÕâ¸ö±ØÒª
Ö±½ÓÕâÑùÐÞ¸Ä:
bool operator() ( const elemType &val )
{
return Comp()(val, _val);
}

feelingback ·¢±íÓÚ 2003-7-21 16:43

¸ÐлÁ½Î»µÄ»Ø´ð¡£  
  ÎÒ¾õµÃÔÚÎÒÐ޸ĹýµÄbool operator() ( const elemType &val )°æ±¾ÖеÄÄǸö¶ÔÏócomp£¬ÊÇlocal object,ÄÇôº¯Êýoperator()Ò»Ö´ÐÐÍêËü¾Í²»´æÔÚÁË¡£ÎÒûÓзµ»Ø¸Ã¶ÔÏóµÄÒýÓûòµØÖ·£¬ÄÇôӦ¸ÃûÓÐÉú´æÆÚµÄ´íÎó¡£
  ¹ØÓÚ°æÖ÷µÄÐ޸ģ¬ÎÒ¾õµÃÊǸöºÜ¼ò½à¶øÇÒ²»´íµÄ·½·¨¡£ÎÒÏëÖªµÀµÄÊÇÆäÖеġ°return Comp()(val, _val);¡°ÊDz»ÊÇÏ൱ÓÚÉú³ÉÁËÒ»¸öÄäÃûµÄCompÀàÐ͵Ä
object£¬È»ºóÓÖµ÷ÓÃÁËCompµÄmember function :operator()¡£
  ÒÔÉÏÊÇÎÒµÄһЩÏë·¨£¬Ï£Íû¿ÉÒԵõ½´ó¼ÒµÄÖ¸µã¡£

flag ·¢±íÓÚ 2003-7-21 17:47

àÅ£¬È·ÊµÊÇ¡£

Ò³: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.