C++0x の を C++98/03 の範囲で再現してみた

C++0x で定義されている std::all_of 辺りが使いたかったので、
その辺を適当に実装したヘッダを作ってみました:

http://gist.github.com/664418


実装した関数は以下の通りです:

  • all_of
  • any_of
  • none_of
  • find_if_not
  • is_permutation
  • copy_n
  • copy_if
  • is_partitioned
  • partition_copy
  • partition_point
  • is_sorted
  • is_sorted_until
  • minmax (純粋なC++98/03だとコンパイル通らない可能性も)
  • minmax_element (boost::minmax_elementをそのまま持ってきただけ)

どんな関数なのかは実装を読めば分かるかと思うので、ここでは解説しませんが、
all_of とか copy_if 辺りは必須だと思うので、気に入ったらどうぞ使ってください。


あと、これらを実装するにあたって、標準の条件関数オブジェクトだといろいろ不便なので、
扱いやすいように改善した関数オブジェクトを自前で用意してみました。
それらの実装も上記の gist にはありますが、こんなもの使わなくても、
Boost.Bind なり Boost.Lambda なり C++0x のラムダ式なりを使えばいい話なので、
ここでその使い方を解説するようなことは今のところ特にするつもりは無いので悪しからず。

// というか凝った実装にしようとしたら関連部品を定義したヘッダの数が膨れ上がったでござる
// gist ではなくて専用のリポジトリにするべきだったのかもしれない