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。Fn
がobject
かその派生型である場合、現在のスコープに多重定義の1つとして追加される。fn
は呼び出し可能でなければならない。a1
がoverload-dispatch-expression
の結果である場合、有効なのは 2 番目の形式のみでありfn
は引数長がA1
の最大引数長と同じ関数へのポインタかメンバ関数へのポインタでなければならない。
- 効果
Fn
の引数型列の接頭辞P
それぞれについて、その長さがA1
の最小引数長であるものから、現在のスコープにname(...)
関数の多重定義を追加する。生成された各多重定義は、a1
の<link linkend="v2.CallPolicies">呼び出しポリシー</link>のコピーを使用してa1
のcall-expression
をP
とともに呼び出す。A1
の合法な接頭辞の最長のものがN
個の型を有しておりa1
がN
個のキーワードを保持しているとすると、各多重定義の先頭の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 のドキュメンテーション文字列");
}