設定に関する情報

David Abrahams
Copyright © 2002-2015 David Abrahams, Stefan Seefeld

設定

はじめに

Boost.Python<boost/config.hpp> にある数個の設定マクロのほか、アプリケーションが与える設定マクロを使用する。これらのマクロについて記載する。

アプリケーション定義のマクロ

これらは Boost.Python を使用するアプリケーションが定義可能なマクロである。動的ライブラリをカバーするのに C++ 標準の厳密な解釈を拡大するのであれば、異なるライブラリ(拡張モジュールや Boost.Python 自身も含む)をコンパイルするときにこれらのマクロの異なる値を使用することは ODR 違反であることに注意していただきたい。しかしながら、この種の違反を検出可能か問題となる C++ 実装は無いようである。

マクロ

既定

意味

BOOST_PYTHON_MAX_ARITY

15

引数 x1, x2, ...xn をとるよう指定した Boost.Python 関数の起動における、ラップする関数、メンバ関数、コンストラクタの最大引数長。これには特に object::operator()(...)call_method<R>(...) のようなコールバック機構も含まれる。

BOOST_PYTHON_MAX_BASES

10

ラップした C++ クラスの基底型を指定する bases<...> クラステンプレートのテンプレート引数の最大数。

BOOST_PYTHON_STATIC_MODULE

(未定義)

定義すると、モジュール初期化関数がエクスポート対象シンボルとして扱われないようになる(コード内での区別をサポートするプラットフォームの場合)。

BOOST_PYTHON_ENABLE_CDECL

(未定義)

定義すると、__cdecl 呼び出し規約を使用する関数のラップが可能となる。

BOOST_PYTHON_ENABLE_STDCALL

(未定義)

定義すると、__stdcall 呼び出し規約を使用する関数のラップが可能となる。

BOOST_PYTHON_ENABLE_FASTCALL

(未定義)

定義すると、__fastcall 呼び出し規約を使用する関数のラップが可能となる。

ライブラリ定義の実装マクロ

これらのマクロは Boost.Python が定義するものであり、新しいプラットフォームへ移植する実装者のみが取り扱う実装の詳細である。

マクロ

既定

意味

BOOST_PYTHON_TYPE_ID_NAME

(未定義)

定義すると、共有ライブラリ境界をまたいだ type_info の比較がこのプラットフォームでは動作しないことを指定する。言い換えると、shared-lib-2 内の typeid(T) を比較する関数に shared-lib-1 が typeid(T) を渡すと、比較結果は false になるということである。このマクロを定義しておくと、Boost.Python は std::type_info オブジェクトの比較を直接使用する代わりに typeid(T).name() の比較を使用する。

BOOST_PYTHON_NO_PY_SIGNATURES

(未定義)

定義すると、モジュール関数のドキュメンテーション文字列に対して Python のシグニチャが生成されなくなり、モジュールが登録した変換器に Python 型が紐付かなくなる。また、モジュールのバイナリサイズが約 14%(gcc でコンパイルした場合)削減する。boost_python 実行時ライブラリで定義すると、docstring_options.enable_py_signatures() の既定は false に設定される。

BOOST_PYTHON_SUPPORTS_PY_SIGNATURES

BOOST_PYTHON_NO_PY_SIGNATURES を定義していないと定義される

このマクロを定義すると、Python のシグニチャをサポートしない古いバージョンの Boost.Python からのスムースな移行が有効になる。使用例はここを見よ。

BOOST_PYTHON_PY_SIGNATURES_PROPER_INIT_SELF_TYPE

(未定義)

定義すると、__init__ メソッドの self 引数の Python 型を適切に生成する。それ以外の場合、object を使用する。モジュールのバイナリサイズが約 14%(gcc でコンパイルした場合)増加するため、既定では定義されない。