关于函数类的疑惑
在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是一样的意思.
关于函数类的疑惑,该如何处理
关于函数类的疑惑在essentialc++里看到了关于函数类的知识,在其调用方面产生了很大的疑惑,内容如下classLe
