構成

コンパイラセットアップ

Boost.Config サブシステムがあるため、Boost.Regex を使うのに特別な構成は必要ない。問題がある場合(あるいは一般的でないコンパイラやプラットフォームを使う場合)は Boost.Config に構成スクリプトがあるので、そちらを使うとよい。

(他の Boost ライブラリを使用せず)スタンドアロンモードで使用する

このライブラリは、Boost の他のライブラリを使用しない「スタンドアロン」モードで使用可能となった。このためには以下のいずれかでなければならない。

  • __has_include をサポートする C++17 コンパイラを利用する。この場合、<boost/config.hpp>無ければ自動的にスタンドアロンモードになる。もしくは

  • ビルド時に BOOST_REGEX_STANDALONE を定義する。

2 つのモードの主な違いは、Boost.Config が与えられたときにライブラリがコンパイラの欠陥を回避して自身を自動的に調整することである。特に例外サポートをオフにしてライブラリを使用するには、インクルードパスに Boost.Config のコピーを置くか、ビルド時に BOOST_NO_EXCEPTIONS を手動で定義する必要がある。

ロカールおよび特性クラスの選択

ユーザのロカール(locale)を Boost.Regex がどのように処理するか制御するには、以下のマクロ(user.hpp を見よ)を使う。

BOOST_REGEX_USE_C_LOCALE

Boost.Regex が、特性クラス中で大域 C ロカールを使うように強制する。C++ ロカールがあるのでこの設定は現在非推奨となっている。

BOOST_REGEX_USE_CPP_LOCALE

Boost.Regex が、既定特性クラス中で std::locale を使うように強制する。各正規表現はインスタンス固有のロカールにより imbue される。これは Windows 以外のプラットフォームにおける既定の動作である。

BOOST_REGEX_NO_W32

Boost.Regex は(利用可能な場合でも)あらゆる Win32 API を使用しない(BOOST_REGEX_USE_C_LOCALE が設定されない限り BOOST_REGEX_USE_CPP_LOCALE が暗黙に有効になる)。

アルゴリズムの調整

BOOST_REGEX_BLOCKSIZE

Boost.Regex は状態マシンのスタックのために大きめのメモリブロックを使う。ブロックのサイズが大きいほどメモリ確保の回数は少なくなる。既定は 4096 バイトであり、大抵の正規表現マッチでメモリの再確保が必要ない値である。しかしながらプラットフォームの特性を見た上で、別の値を選択することも可能である。

BOOST_REGEX_MAX_BLOCKS

サイズ BOOST_REGEX_BLOCKSIZE のブロックをいくつ使用できるか設定する。この値を超えると Boost.Regex はマッチの検索を停止し、std::runtime_error を投げる。既定値は 1024 である。BOOST_REGEX_BLOCKSIZE を変更した場合、この値にも微調整が必要である。

BOOST_REGEX_MAX_CACHE_BLOCKS

内部キャッシュに格納するメモリブロック数を設定する。メモリブロックは ::operator new 呼び出しではなくこのキャッシュから割り当てられる。一般的にこの方法はメモリブロック要求のたびに ::operator new を呼び出すよりも数段高速だが、巨大なメモリチャンク(サイズが BOOST_REGEX_BLOCKSIZE のブロックが最大 16 個)をキャッシュしなければならないという欠点がある。メモリの制限が厳しい場合は、この値を 0 に設定し(キャッシュはまったく行われない)、それで遅すぎる場合は 1 か 2 にするとよい。逆に巨大なマルチプロセッサ、マルチスレッドのシステムでは大きな値のほうがよい。