⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 python_test.cpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 CPP
字号:
// Copyright Daniel Wallin 2006. Use, modification and distribution is// subject to 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)#include <boost/python.hpp>#include <boost/parameter/preprocessor.hpp>#include <boost/parameter/keyword.hpp>#include <boost/parameter/python.hpp>#include <boost/utility/enable_if.hpp>namespace test {BOOST_PARAMETER_KEYWORD(tags, x)BOOST_PARAMETER_KEYWORD(tags, y)BOOST_PARAMETER_KEYWORD(tags, z)struct Xbase{    // We need the disable_if part for VC7.1/8.0.    template <class Args>    Xbase(        Args const& args      , typename boost::disable_if<            boost::is_base_and_derived<Xbase, Args>        >::type* = 0    )      : value(std::string(args[x | "foo"]) + args[y | "bar"])    {}    std::string value;};struct X : Xbase{    BOOST_PARAMETER_CONSTRUCTOR(X, (Xbase), tags,        (optional         (x, *)         (y, *)        )    )    BOOST_PARAMETER_BASIC_MEMBER_FUNCTION((int), f, tags,        (required         (x, *)         (y, *)        )        (optional         (z, *)        )    )    {        return args[x] + args[y] + args[z | 0];    }    BOOST_PARAMETER_BASIC_MEMBER_FUNCTION((std::string), g, tags,        (optional         (x, *)         (y, *)        )    )    {        return std::string(args[x | "foo"]) + args[y | "bar"];    }    BOOST_PARAMETER_MEMBER_FUNCTION((X&), h, tags,        (optional (x, *, "") (y, *, ""))    )    {        return *this;    }    template <class A0>    X& operator()(A0 const& a0)    {        return *this;    }};} // namespace teststruct f_fwd{    template <class R, class T, class A0, class A1, class A2>    R operator()(boost::type<R>, T& self, A0 const& a0, A1 const& a1, A2 const& a2)    {        return self.f(a0,a1,a2);    }};struct g_fwd{    template <class R, class T, class A0, class A1>    R operator()(boost::type<R>, T& self, A0 const& a0, A1 const& a1)    {        return self.g(a0,a1);    }};struct h_fwd{    template <class R, class T>    R operator()(boost::type<R>, T& self)    {        return self.h();    }    template <class R, class T, class A0>    R operator()(boost::type<R>, T& self, A0 const& a0)    {        return self.h(a0);    }    template <class R, class T, class A0, class A1>    R operator()(boost::type<R>, T& self, A0 const& a0, A1 const& a1)    {        return self.h(a0,a1);    }};BOOST_PYTHON_MODULE(python_test_ext){    namespace mpl = boost::mpl;    using namespace test;    using namespace boost::python;    class_<X>("X")        .def(            boost::parameter::python::init<                mpl::vector<                    tags::x*(std::string), tags::y*(std::string)                >            >()        )        .def(            "f"          , boost::parameter::python::function<                f_fwd              , mpl::vector<                    int, tags::x(int), tags::y(int), tags::z*(int)                >            >()        )        .def(            "g"          , boost::parameter::python::function<                g_fwd              , mpl::vector<                    std::string, tags::x*(std::string), tags::y*(std::string)                >            >()        )        .def(            "h"          , boost::parameter::python::function<                h_fwd              , mpl::vector<                    X&, tags::x**(std::string), tags::y**(std::string)                >            >()          , return_arg<>()        )        .def(            boost::parameter::python::call<                mpl::vector<                    X&, tags::x(int)                >            >() [ return_arg<>() ]        )        .def_readonly("value", &X::value);}

⌨️ 快捷键说明

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