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 のドキュメンテーション文字列");
}