とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

std::pointer_to_binary_function, std::ptr_fun

STL―標準テンプレートライブラリによるC++プログラミング 第2版
関数へのポインタのためのアダプタ。

// P205 ex11-02.cpp
#include<string>
bool less1(const std::string& x, const std::string& y){
 return x < y;
}
bool greater1(const std::string& x, const std::string& y){
 return x > y;
}
#include<iostream>
#include<iterator>
#include<set>
#include<functional>
#include<algorithm>
int main(){
 using std::cout;
 using std::endl;
 using std::ostream_iterator;
 using std::set;
 using std::string;
 using std::pointer_to_binary_function;
 using std::ptr_fun;
 using std::copy;
 cout << "Illustrating the use of an adaptor for pointers to functions."
  << endl;
 ostream_iterator<string> o(cout, " ");
 typedef set<
  string,
  pointer_to_binary_function<
   const string&,
   const string&,
   bool
  >
 > Set;
 {
  Set lessSet(ptr_fun(less1));
  lessSet.insert("the");
  lessSet.insert("quick");
  lessSet.insert("brown");
  lessSet.insert("fox");
  copy(lessSet.begin(), lessSet.end(), o);
  cout << endl;
 }
 {
  Set greaterSet(ptr_fun(greater1));
  greaterSet.insert("the");
  greaterSet.insert("quick");
  greaterSet.insert("brown");
  greaterSet.insert("fox");
  copy(greaterSet.begin(), greaterSet.end(), o);
  cout << endl;
 }
}

出力:

Illustrating the use of an adaptor for pointers to functions.
brown fox quick the
the quick fox brown