关于函数类的疑惑,该如何处理

关于函数类的疑惑在essentialc++里看到了关于函数类的知识,在其调用方面产生了很大的疑惑,内容如下classLe

关于函数类的疑惑
在essential   c++里看到了关于函数类的知识,在其调用方面产生了很大的疑惑,内容如下

class   LessThan   {  
public:  
      LessThan(   int   val   )   :   _val(   val   ){}  
      int     comp_val()   const         {   return   _val;   }  
      void   comp_val(   int   nval   ){   _val   =   nval;   }  

      bool   operator()(   int   value   )   const;  

private:  
      int   _val;  
};  


inline   bool   LessThan::  
operator()(   int   value   )   const   {   return   value   <   _val;   }  


void   print_less_than(   const   vector <int>   &vec,  
                                            int   comp,   ostream   &os   =   cout   )  
{  
      LessThan   lt(   comp   );  
      vector <int> ::const_iterator   iter   =   vec.begin();  
      vector <int> ::const_iterator   it_end   =   vec.end();  

      os   < <   "elements   less   than   "   < <   lt.comp_val()   < <   endl;  
      while   ((   iter   =   find_if(   iter,   it_end,   lt   ))   !=   it_end   )  
      {  
                    os   < <   *iter   < <   '   ';  
                    ++iter;  
      }  
}

这里只通过LessThan的对象lt来调用对()的重载。但是在调用的时候为什么是 "lt "而不是 "lt() "?
还有在std里有的greater <T> ,less <T> 等作为find_if()的第三个参数时都是写greater <T> (),这里的greater是类还是对象?

[解决办法]
给find_if()第三个参数传递函数对象,实际在find_if内完成对函数对象lt的函数调用操作符的调用:lt(),所以如果传递的不是lt,而是lt(),首先:编译就出错,因为这样是将lt()的返回值传给find_if,而lt()需要一个实参,而你却没给它,其次:在find_if内部对lt()的返回值bool型调用(),肯定不对啦!

greater不是类,更不是对象,而是类模板,greater <int> 才是类, greater <int> obj; obj是对象;
greater <T> ()是创建greater <T> 的一个无名函数对象,并把它传给find_if,和lt是一样的意思.