m2.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 99 行

CPP
99
字号
// Copyright David Abrahams 2001.// Distributed under the Boost Software License, Version 1.0. (See// accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)// This module exercises the converters exposed in m1 at a low level// by exposing raw Python extension functions that use wrap<> and// unwrap<> objects.#include <boost/python/module.hpp>#include <boost/python/def.hpp>#include <boost/python/copy_non_const_reference.hpp>#include <boost/python/copy_const_reference.hpp>#include <boost/python/return_value_policy.hpp>#include "simple_type.hpp"// Get a simple (by value) from the argument, and return the// string it holds.PyObject* unwrap_simple(simple x){    return PyString_FromString(x.s);}// Likewise, but demands that its possible to get a non-const// reference to the simple.PyObject* unwrap_simple_ref(simple& x){    return PyString_FromString(x.s);}// Likewise, with a const reference to the simple object.PyObject* unwrap_simple_const_ref(simple const& x){    return PyString_FromString(x.s);}// Get an int (by value) from the argument, and convert it to a// Python Int.PyObject* unwrap_int(int x){    return PyInt_FromLong(x);}// Get a non-const reference to an int from the argumentPyObject* unwrap_int_ref(int& x){    return PyInt_FromLong(x);}// Get a const reference to an  int from the argument.PyObject* unwrap_int_const_ref(int const& x){    return PyInt_FromLong(x);}// rewrap<T> extracts a T from the argument, then converts the T back// to a PyObject* and returns it.template <class T>struct rewrap{    static T f(T x) { return x; }};BOOST_PYTHON_MODULE(m2){    using boost::python::return_value_policy;    using boost::python::copy_const_reference;    using boost::python::copy_non_const_reference;    using boost::python::def;        def("unwrap_int", unwrap_int);    def("unwrap_int_ref", unwrap_int_ref);    def("unwrap_int_const_ref", unwrap_int_const_ref);    def("unwrap_simple", unwrap_simple);    def("unwrap_simple_ref", unwrap_simple_ref);    def("unwrap_simple_const_ref", unwrap_simple_const_ref);    def("wrap_int", &rewrap<int>::f);            def("wrap_int_ref", &rewrap<int&>::f        , return_value_policy<copy_non_const_reference>()        );            def("wrap_int_const_ref", &rewrap<int const&>::f        , return_value_policy<copy_const_reference>()        );            def("wrap_simple", &rewrap<simple>::f);            def("wrap_simple_ref", &rewrap<simple&>::f        , return_value_policy<copy_non_const_reference>()        );            def("wrap_simple_const_ref", &rewrap<simple const&>::f        , return_value_policy<copy_const_reference>()            );}#include "module_tail.cpp"

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?