我有两个与函数对象和函数指针有关的问题,
问题:1
当我阅读STL的不同用途sort
算法时,我看到第三个参数可以是一个函数对象,下面是一个例子
class State {
public:
//...
int population() const;
float aveTempF() const;
//...
};
struct PopLess : public std::binary_function<State,State,bool> {
bool operator ()( const State &a, const State &b ) const
{ return popLess( a, b ); }
};
sort( union, union+50, PopLess() );
问题 :
现在,该声明如何sort(union, union+50,PopLess())
工作?PopLess()
必须解析为与在临时对象上PopLess tempObject.operator()
执行函数相同的内容。operator ()
我认为这是将重载操作的返回值bool
(如我的示例)传递给sort
算法。
那么,这种情况下 sort 函数如何解析第三个参数呢?
问题2
问题
我们是否获得了使用函数对象与函数指针相比的任何特殊优势?如果我们使用下面的函数指针,它会带来任何不利吗?
inline bool popLess( const State &a, const State &b )
{ return a.population() < b.population(); }
std::sort( union, union+50, popLess ); // sort by population
PS:以上两个参考资料(包括示例)均来自“Stephen C. Dewhurst”的“C++ Common Knowledge: Essential Intermediate Programming”一书。
我无法解码主题内容,因此已发布寻求帮助。
在此先感谢您的帮助。