亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tutorial.qbk

?? C++的一個好庫。。。現在很流行
?? QBK
?? 第 1 頁 / 共 5 頁
字號:
[library python
    [version 1.0]
    [authors [de Guzman, Joel], [Abrahams, David]]
    [copyright 2002 2003 2004 2005 Joel de Guzman, David Abrahams]
    [category inter-language support]
    [purpose
        Reflects C++ classes and functions into Python
    ]
    [license
        Distributed under the Boost Software License, Version 1.0.
        (See accompanying file LICENSE_1_0.txt or copy at
        <ulink url="http://www.boost.org/LICENSE_1_0.txt">
            http://www.boost.org/LICENSE_1_0.txt
        </ulink>)
    ]
]

[/ QuickBook Document version 0.9 ]

[def __note__       [$images/note.png]]
[def __alert__      [$images/alert.png]]
[def __tip__        [$images/tip.png]]
[def :-)            [$images/smiley.png]]
[def __jam__        [$images/jam.png]]

[section QuickStart]

The Boost Python Library is a framework for interfacing Python and
C++. It allows you to quickly and seamlessly expose C++ classes
functions and objects to Python, and vice-versa, using no special
tools -- just your C++ compiler. It is designed to wrap C++ interfaces
non-intrusively, so that you should not have to change the C++ code at
all in order to wrap it, making Boost.Python ideal for exposing
3rd-party libraries to Python. The library's use of advanced
metaprogramming techniques simplifies its syntax for users, so that
wrapping code takes on the look of a kind of declarative interface
definition language (IDL).

[h2 Hello World]

Following C/C++ tradition, let's start with the "hello, world". A C++
Function:

    char const* greet()
    {
       return "hello, world";
    }

can be exposed to Python by writing a Boost.Python wrapper:

    #include <boost/python.hpp>
    using namespace boost::python;

    BOOST_PYTHON_MODULE(hello)
    {
        def("greet", greet);
    }

That's it. We're done. We can now build this as a shared library. The
resulting DLL is now visible to Python. Here's a sample Python session:

[python]

    >>> import hello
    >>> print hello.greet()
    hello, world

[c++]

[:['[*Next stop... Building your Hello World module from start to finish...]]]

[endsect]
[section:hello Building Hello World]

[h2 From Start To Finish]

Now the first thing you'd want to do is to build the Hello World module and
try it for yourself in Python. In this section, we shall outline the steps
necessary to achieve that. We shall use the build tool that comes bundled
with every boost distribution: [*bjam].

[blurb __note__ [*Building without bjam]\n\n
    Besides bjam, there are of course other ways to get your module built.
    What's written here should not be taken as "the one and only way".
    There are of course other build tools apart from [^bjam].\n\n
    Take note however that the preferred build tool for Boost.Python is bjam.
    There are so many ways to set up the build incorrectly. Experience shows
    that 90% of the "I can't build Boost.Python" problems come from people
    who had to use a different tool.
]

We shall skip over the details. Our objective will be to simply create the
hello world module and run it in Python. For a complete reference to
building Boost.Python, check out: [@../../../building.html building.html].
After this brief ['bjam] tutorial, we should have built two DLLs:

* boost_python.dll
* hello.pyd

if you are on Windows, and

* libboost_python.so
* hello.so

if you are on Unix.

The tutorial example can be found in the directory:
[^libs/python/example/tutorial]. There, you can find:

* hello.cpp
* Jamfile

The [^hello.cpp] file is our C++ hello world example. The [^Jamfile] is a
minimalist ['bjam] script that builds the DLLs for us.

Before anything else, you should have the bjam executable in your boost
directory or somewhere in your path such that [^bjam] can be executed in
the command line. Pre-built Boost.Jam executables are available for most
platforms. The complete list of Bjam executables can be found
[@http://sourceforge.net/project/showfiles.php?group_id=7586 here].

[h2 Let's Jam!]
__jam__

Here is our minimalist Jamfile:

[pre
# This is the top of our own project tree
project-root ;

import python ;

extension hello                     # Declare a Python extension called hello
:   hello.cpp                       # source
    # requirements and dependencies for Boost.Python extensions
    <template>@boost/libs/python/build/extension
    ;
]

First, we need to specify our location. You may place your project anywhere.
[^project-root] allows you to do that.

[pre
project-root ;
]

By doing so, you'll need a Jamrules file. Simply copy the one in the 
[@../../../../example/tutorial/Jamrules example/tutorial directory] and tweak 
the [^path-global BOOST_ROOT] to where your boost root directory is. The file
has [@../../../../example/tutorial/Jamrules detailed instructions] you can follow.

Then we will import the definitions needed by Python modules:

[pre
import python ;
]

Finally we declare our [^hello] extension:

[pre
extension hello                     # Declare a Python extension called hello
:   hello.cpp                       # source

    # requirements and dependencies for Boost.Python extensions
    <template>@boost/libs/python/build/extension
    ;
]

The last part tells BJam that we are depending on the Boost Python Library.

[h2 Running bjam]

['bjam] is run using your operating system's command line interpreter.

[:Start it up.]

Make sure that the environment is set so that we can invoke the C++
compiler. With MSVC, that would mean running the [^Vcvars32.bat] batch
file. For instance:

[pre
C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat
]

Some environment variables will have to be setup for proper building of our
Python modules. Example:

[pre
set PYTHON_ROOT=c:/dev/tools/python
set PYTHON_VERSION=2.2
]

The above assumes that the Python installation is in [^c:/dev/tools/python]
and that we are using Python version 2.2. You'll have to tweak these
appropriately.

[blurb __tip__ Be sure not to include a third number, e.g. [*not]  "2.2.1",
even if that's the version you have.]

Take note that you may also do that through the Jamrules file we put in
our project as detailed above. The file
has [@../../../../example/tutorial/Jamrules detailed instructions] you 
can follow.

Now we are ready... Be sure to [^cd] to [^libs/python/example/tutorial]
where the tutorial [^"hello.cpp"] and the [^"Jamfile"] is situated.

Finally:

    bjam -sTOOLS=vc-7_1

We are again assuming that we are using Microsoft Visual C++ version 7.1. If
not, then you will have to specify the appropriate tool. See
[@../../../../../../tools/build/index.html Building Boost Libraries] for
further details.

It should be building now:

[pre
cd C:\dev\boost\libs\python\example\tutorial
bjam -sTOOLS=msvc
...patience...
...found 1703 targets...
...updating 40 targets...
]

And so on... Finally:

[pre
Creating library bin\boost\libs\python\build\boost_python.dll\vc-7_1\debug\th
reading-multi\boost_python.lib and object bin\boost\libs\python\build\boost_pyth
on.dll\vc-7_1\debug\threading-multi\boost_python.exp
vc-C++ bin\tutorial\hello.pyd\vc-7_1\debug\threading-multi\hello.obj
hello.cpp
vc-Link bin\tutorial\hello.pyd\vc-7_1\debug\threading-multi\hello.pyd bin\tutori
al\hello.pyd\vc-7_1\debug\threading-multi\hello.lib
   Creating library bin\tutorial\hello.pyd\vc-7_1\debug\threading-multi\hello.li
b and object bin\tutorial\hello.pyd\vc-7_1\debug\threading-multi\hello.exp
...updated 31 targets...
]

If all is well, you should now have:

* boost_python.dll
* hello.pyd

if you are on Windows, and

* libboost_python.so
* hello.so

if you are on Unix.

[^boost_python.dll] and [^hello.pyd] can be found somewhere in your project's
[^bin] directory. After a successful build, you can just link in these DLLs with 
the Python interpreter. In Windows for example, you can simply put these libraries 
inside the directory where the Python executable is.

You may now fire up Python and run our hello module:

[python]

    >>> import hello
    >>> print hello.greet()
    hello, world

[c++]

[:[*There you go... Have fun!]]

[endsect]
[section:exposing Exposing Classes]

Now let's expose a C++ class to Python.

Consider a C++ class/struct that we want to expose to Python:

    struct World
    {
        void set(std::string msg) { this->msg = msg; }
        std::string greet() { return msg; }
        std::string msg;
    };

We can expose this to Python by writing a corresponding Boost.Python
C++ Wrapper:

    #include <boost/python.hpp>
    using namespace boost::python;

    BOOST_PYTHON_MODULE(hello)
    {
        class_<World>("World")
            .def("greet", &World::greet)
            .def("set", &World::set)
        ;
    }

Here, we wrote a C++ class wrapper that exposes the member functions
[^greet] and [^set]. Now, after building our module as a shared library, we
may use our class [^World] in Python. Here's a sample Python session:

[python]

    >>> import hello
    >>> planet = hello.World()
    >>> planet.set('howdy')
    >>> planet.greet()
    'howdy'

[section Constructors]

Our previous example didn't have any explicit constructors.
Since [^World] is declared as a plain struct, it has an implicit default
constructor. Boost.Python exposes the default constructor by default,
which is why we were able to write

    >>> planet = hello.World()

We may wish to wrap a class with a non-default constructor. Let us
build on our previous example:

[c++]

    struct World
    {
        World(std::string msg): msg(msg) {} // added constructor
        void set(std::string msg) { this->msg = msg; }
        std::string greet() { return msg; }
        std::string msg;
    };

This time [^World] has no default constructor; our previous
wrapping code would fail to compile when the library tried to expose
it. We have to tell [^class_<World>] about the constructor we want to
expose instead.

    #include <boost/python.hpp>
    using namespace boost::python;

    BOOST_PYTHON_MODULE(hello)
    {
        class_<World>("World", init<std::string>())
            .def("greet", &World::greet)
            .def("set", &World::set)
        ;
    }

[^init<std::string>()] exposes the constructor taking in a
[^std::string] (in Python, constructors are spelled
"[^"__init__"]").

We can expose additional constructors by passing more [^init<...>]s to
the [^def()] member function. Say for example we have another World
constructor taking in two doubles:

    class_<World>("World", init<std::string>())
        .def(init<double, double>())
        .def("greet", &World::greet)
        .def("set", &World::set)
    ;

On the other hand, if we do not wish to expose any constructors at
all, we may use [^no_init] instead:

    class_<Abstract>("Abstract", no_init)

This actually adds an [^__init__] method which always raises a
Python RuntimeError exception.

[endsect]
[section Class Data Members]

Data members may also be exposed to Python so that they can be
accessed as attributes of the corresponding Python class. Each data
member that we wish to be exposed may be regarded as [*read-only] or
[*read-write].  Consider this class [^Var]:

    struct Var
    {
        Var(std::string name) : name(name), value() {}
        std::string const name;
        float value;
    };

Our C++ [^Var] class and its data members can be exposed to Python:

    class_<Var>("Var", init<std::string>())
        .def_readonly("name", &Var::name)
        .def_readwrite("value", &Var::value);

Then, in Python, assuming we have placed our Var class inside the namespace
hello as we did before:

[python]

    >>> x = hello.Var('pi')
    >>> x.value = 3.14

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一区二区三区全黄| 一区二区三区在线视频免费| 91黄视频在线观看| av成人免费在线观看| 国产九九视频一区二区三区| 久久97超碰国产精品超碰| 日本午夜精品一区二区三区电影| 一级做a爱片久久| 亚洲韩国一区二区三区| 亚洲一区二区三区美女| 综合在线观看色| 亚洲乱码国产乱码精品精小说 | 美女一区二区久久| 日韩二区在线观看| 久久成人久久鬼色| 国产成人精品aa毛片| 91老司机福利 在线| 一本大道综合伊人精品热热| 欧美在线一二三四区| 欧美日本一区二区在线观看| 日韩一二三区视频| 日本一区二区三区久久久久久久久不 | 成人美女视频在线观看| 色久综合一二码| 91精品国产色综合久久| 久久久91精品国产一区二区三区| 亚洲欧洲另类国产综合| 亚洲国产sm捆绑调教视频 | 国产欧美精品一区| 中文字幕永久在线不卡| 午夜亚洲福利老司机| 国产综合色视频| 色噜噜久久综合| 欧美tickle裸体挠脚心vk| 国产精品毛片a∨一区二区三区| 亚洲欧美区自拍先锋| 日韩精品电影一区亚洲| 成人午夜视频福利| 欧美日韩三级一区二区| 久久久久久9999| 日韩国产在线观看| 94-欧美-setu| 国产三级久久久| 香港成人在线视频| 99re66热这里只有精品3直播| 日韩一区二区三区视频| 亚洲精品久久久久久国产精华液| 韩国av一区二区三区四区| 在线中文字幕一区二区| 国产日韩欧美精品一区| 久久丁香综合五月国产三级网站| 在线视频欧美区| 亚洲国产高清不卡| 国模套图日韩精品一区二区| 欧美日韩www| 亚洲一区二区在线免费观看视频| 成人性生交大片免费看视频在线 | 国产黑丝在线一区二区三区| 欧美一级久久久| 亚洲一区二区五区| av中文字幕在线不卡| 国产午夜亚洲精品羞羞网站| 激情欧美日韩一区二区| 91精品国产入口| 亚洲成av人片一区二区| 色综合久久中文字幕综合网| 国产精品九色蝌蚪自拍| 成人免费毛片嘿嘿连载视频| 久久九九影视网| 国产成人综合网站| 国产欧美日产一区| 丁香婷婷综合五月| 国产精品视频线看| 99久久精品免费| 亚洲欧美另类久久久精品2019| 99久久精品国产导航| 欧美国产视频在线| 99热这里都是精品| 亚洲欧美电影一区二区| 欧美最猛黑人xxxxx猛交| 悠悠色在线精品| 91精品国产一区二区三区蜜臀 | 麻豆精品视频在线观看免费| 91精品视频网| 激情综合色综合久久综合| 精品国产乱码久久久久久夜甘婷婷 | 日韩精品专区在线影院重磅| 久久精品国产在热久久| 欧美精品一区二区三区在线| 国产伦精品一区二区三区视频青涩 | 国产在线乱码一区二区三区| 久久久久久久久久久久电影 | 91官网在线观看| 午夜一区二区三区在线观看| 日韩欧美亚洲另类制服综合在线 | 欧美三级三级三级| 日产欧产美韩系列久久99| 精品久久久三级丝袜| a4yy欧美一区二区三区| 亚洲成av人片在线观看无码| 久久一区二区三区四区| gogogo免费视频观看亚洲一| 天堂久久一区二区三区| 久久精品男人的天堂| 日本韩国一区二区三区视频| 久久国产综合精品| 亚洲日本一区二区三区| 337p亚洲精品色噜噜| 国产河南妇女毛片精品久久久| 亚洲自拍偷拍综合| 欧美精品一区二区三区久久久| 97超碰欧美中文字幕| 免费精品视频在线| 亚洲女爱视频在线| 精品少妇一区二区| 欧美视频一区二区三区四区| 高清国产一区二区| 五月天激情综合| 成人欧美一区二区三区黑人麻豆| 日韩欧美一级二级三级| 欧洲另类一二三四区| 久久av中文字幕片| 性做久久久久久久久| 成人欧美一区二区三区小说 | 中文字幕国产一区| 日韩一区二区三| 欧美日韩在线三级| 91网站视频在线观看| 国产精品一级片| 欧美a级理论片| 亚洲成av人片一区二区| 一区二区在线观看av| 最近日韩中文字幕| 国产精品三级视频| 久久看人人爽人人| 久久久精品国产免费观看同学| 91精品国产综合久久久久久漫画| 91免费视频观看| 成+人+亚洲+综合天堂| 粉嫩一区二区三区性色av| 麻豆91小视频| 男人的j进女人的j一区| 亚洲一区二区精品久久av| 亚洲男人的天堂在线观看| 国产精品色婷婷久久58| 国产精品久久久久久久蜜臀| 日本一区二区三区dvd视频在线| 久久久久久久网| 国产午夜亚洲精品午夜鲁丝片| 国产欧美一区二区三区网站| 久久久久国产精品免费免费搜索| 久久综合色婷婷| 久久久国际精品| 亚洲国产精品激情在线观看| 国产精品视频一区二区三区不卡| 欧美激情一区二区三区不卡 | 欧美性生交片4| 欧美裸体bbwbbwbbw| 欧美亚洲国产bt| 6080日韩午夜伦伦午夜伦| 欧美高清精品3d| 欧美成人在线直播| 国产日韩欧美综合在线| 亚洲图片激情小说| 一区二区三区中文在线| 午夜精品久久久久影视| 日韩成人午夜精品| 国产精品1024| 色欧美片视频在线观看| 欧美一激情一区二区三区| 精品处破学生在线二十三| 国产精品免费人成网站| 亚洲尤物在线视频观看| 免费av成人在线| 成人高清免费观看| 欧美日韩国产大片| 久久午夜国产精品| 亚洲男人都懂的| 毛片av一区二区三区| 北岛玲一区二区三区四区| 欧美日韩免费一区二区三区| 久久网这里都是精品| 亚洲激情在线播放| 免费av成人在线| 一本久道久久综合中文字幕| 91麻豆精品久久久久蜜臀| 国产性色一区二区| 丝袜亚洲另类欧美综合| 成人免费视频视频| 欧美一卡二卡三卡| 综合久久久久久| 久久99在线观看| 91国产免费观看| 欧美激情一区在线| 免费成人美女在线观看| 在线视频中文字幕一区二区| 久久精品一区二区| 日韩福利视频导航| 欧美偷拍一区二区| 国产精品久久久久一区二区三区|