関数オブジェクトと関数ポインタに関する 2 つの質問があります。
質問1
STLのさまざまな用途のアルゴリズムを読むsort
と、3 番目のパラメーターが関数オブジェクトになる可能性があることがわかります。以下に例を示します。
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
では、この場合、並べ替え関数はどのように 3 番目のパラメーターを解決しますか?
質問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" からのものです。
トピックの内容を解読できなかったため、ヘルプを投稿しました。
よろしくお願いします。