boost python def 函數導出

Introduction

def() is the function which can be used to expose C++ functions and callable objects as Python functions in the current scope.

這個函數可以幫助我們將C++中的函數導出到Python中,供Python使用。說實話,真的很好用。

Functions

def

template <class F>
void def(char const* name, F f);

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&);



Requires: name is an ntbs which conforms to Python's identifier naming rules.

  • If Fn is [derived from] object, it will be added to the current scope as a single overload. To be useful, fn should be callable.
  • If a1 is the result of an overload-dispatch-expression, only the second form is allowed and fn must be a pointer to function or pointer to member function whose arity is the same as A1's maximum arity.
    Effects: For each prefix P of Fn's sequence of argument types, beginning with the one whose length is A1's minimum arity, adds a name(...) function overload to the current scope. Each overload generated invokes a1's call-expression with P, using a copy of a1's call policies. If the longest valid prefix of A1 contains N types and a1 holds M keywords, an initial sequence of the keywords are used for all but the first N - M arguments of each overload.
  • Otherwise, fn must be a non-null function or member function pointer, and a single function overload built around fn is added to the current scope. If any of a1-a3 are supplied, they may be selected in any order from the table below.
Memnonic Name Requirements/Type properties Effects
docstring Any ntbs. Value will be bound to the __doc__ attribute of the resulting method overload.
policies A model of CallPolicies A copy will be used as the call policies of the resulting method overload.
keywords The result of a keyword-expression specifying no more arguments than thearity of fn. A copy will be used as the call policies of the resulting method overload.

Example

例子,其實按照下面的例子,很容易就明白了。
主要是
第一個參數,填寫你在Python中使用他的名字
第二個參數,寫上函數指針
第三個參數,填上參數名,好讓boost只要你的函數有幾個參數。
第四個參數,是描述,可以忽略

其實還有個很重要的是返回協議(return policy ),詳見:http://blog.csdn.net/cedricporter/article/details/6828322

#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's docstring");
}



7 March, 2003

© Copyright Dave Abrahams 2002.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章