1.35での変更点

  • Boost.RangeはBoost1.35で破壊的に変更されるのでまとめます
  • null-terminatedな char const* はRangeではない
    • boost::as_literalでRangeにする
  • charの配列は、\0は考慮されず普通の配列として扱われる
    • つまりboost::size("123")は4を返す
    • null-terminatedとして扱いたい場合は、as_literalを使う
  • range_iteratorはrange_mutable_iteratorに名称変更
  • range_result_iteratorはrange_iteratorに名称変更
  • range_mutable_iteratorとrange_contant_iteratorの利用はspecializeする場合を除いて非推奨
  • range_sizeはおそらく廃止
  • boost_range_beginはrange_beginに名称変更
  • boost_range_endはrange_endに名称変更
  • boost_range_sizeはもう呼ばれない
  • boost::sizeはRandomAccessRangeしか受け付けない
    • RandomAccessRangeでない場合はboost::distanceを使う

value_based

  • スマートポインタを値のように振舞うようにするクラステンプレート
    • 実装は、この辺り (コピーしてnewするだけである)
  • これで、元々"value-based"であるpolyと、スマートポインタを同じように扱えるようにする
  • 以下はサンプル
    • 派生クラスは(当然基底クラスも)Copyableでないといけない
    • polyvalue_based< clone_ptr >の最適化、ということになる
続きを読む