我有两个关于函数对象和函数指针的问题。
问题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"。
由于我无法理解主题内容,因此发布了求助帖。
非常感谢您的帮助。
operator()()
成员函数进行调用可以轻松地进行内联。 - sbi:)
- sbi