boost/python/def.hpp

はじめに

def は現在の scope で C++ の関数や呼び出し可能オブジェクトを Python の関数としてエクスポートする関数である。

関数

template<class Fn>
void def(char const *name, Fn fn)
template<class Fn, class A1>
void def(char const *name, Fn fn, A1 const&)
template<class Fn, class A1, class A2>
void def(char const *name, Fn fn, A1 const, A2 const&)
template<class Fn, class A1, class A2, class A3>
void def(char const *name, Fn fn, A1 const&, A2 const&, A3 const&)
要件

name は Python の識別子の名前付け規約にしたがった ntbs

  • Fnobject かその派生型である場合、現在のスコープに多重定義の1つとして追加される。fn呼び出し可能でなければならない。

  • a1overload-dispatch-expression の結果である場合、有効なのは 2 番目の形式のみであり fn引数長A1最大引数長と同じ関数へのポインタかメンバ関数へのポインタでなければならない。

効果

Fn の引数型列の接頭辞 P それぞれについて、その長さが A1最小引数長であるものから、現在のスコープname(...) 関数の多重定義を追加する。生成された各多重定義は、a1 の<link linkend="v2.CallPolicies">呼び出しポリシー</link>のコピーを使用して a1call-expressionP とともに呼び出す。A1 の合法な接頭辞の最長のものが N 個の型を有しており a1N 個のキーワードを保持しているとすると、各多重定義の先頭の N - M 個の引数に使用される。

それ以外の場合、fn は null でない関数へのポインタかメンバ関数へのポインタでなければならず、現在のスコープfn の多重定義を 1 つ追加する。a1 から a3 のいずれかが与えられた場合、下表から任意の順番であってよい。

名前

要件・型の特性

効果

docstring

ntbs

値は結果の多重定義メソッドの __doc__ 属性に束縛される。

policies

CallPolicies のモデル

結果の多重定義メソッドの呼び出しポリシーとしてコピーが使用される。

keywords

fn引数長を超えることがないことを指定する keyword-expression の結果。

結果の多重定義メソッドの呼び出しポリシーとしてコピーが使用される。

#include <boost/python/def.hpp>
#include <boost/python/module.hpp>
#include <boost/python/args.hpp>

using namespace boost::python;

char const* foo(int x, int y) { return "foo"; }

BOOST_PYTHON_MODULE(def_test)
{
    def("foo", foo, args("x", "y"), "foo のドキュメンテーション文字列");
}