Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

boost/python/docstring_options.hpp

Boost , Boost.Python Reference Manual , Chapter 2. High Level Components

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Повышаю. Python поддерживает определяемые пользователем докстринги с автоматическим добавлением сигнатур C++. Эти функции включены по умолчанию. Класс docstring_options доступен для выборочного подавления определяемых пользователем докстрингов, подписей или обоих.

Контролирует появление докстрингов обернутых функций и членских функций на протяжении всей жизни экземпляра. Эти случаи не поддаются копированию, чтобы исключить возможность неожиданных побочных эффектов.

namespace boost { namespace python {
  class docstring_options : boost::noncopyable
  {
  public:
    docstring_options(bool show_all=true);
    docstring_options(bool show_user_defined, bool show_signatures);
    docstring_options(bool show_user_defined, bool show_py_signatures, bool show_cpp_signatures);
    ~docstring_options();
    void disable_user_defined();
    void enable_user_defined();
    void disable_signatures();
    void enable_signatures();
    void disable_py_signatures();
    void enable_py_signatures();
    void disable_cpp_signatures();
    void enable_cpp_signatures();
    void disable_all();
    void enable_all();
  };
}}
docstring_options(bool show_all=true);

Effects

Конструирует объект docstring_options, который контролирует внешний вид функции и докстрингов функции-члена, определенных в следующем коде. Если show_all соответствует действительности, отображаются как определяемые пользователем докстринги, так и автоматически генерируемые подписи Python и C++. Если show_all является ложным, атрибуты _doc__ являются Никто.

docstring_options(bool show_user_defined, bool show_signatures);

Effects

Конструирует объект docstring_options, который контролирует внешний вид функции и докстрингов функции-члена, определенных в следующем коде. Iff show_user_defined является true, показаны определяемые пользователем докстринги. Iff show_signatures является true, автоматически добавляются подписи Python и C++. Если оба show_user_defined и show_signatures являются фальсифицированными, атрибуты _doc__ являются None.

docstring_options(bool show_user_defined, bool show_py_signatures, bool show_cpp_signatures);

Effects

Конструирует объект docstring_options, который контролирует внешний вид функции и докстрингов функции-члена, определенных в следующем коде. Iff show_user_defined является true, показаны определяемые пользователем докстринги. Iff show_py_signatures true, подписи Python автоматически добавляются. Iff show_cpp_signatures соответствует действительности, подписи C++ добавляются автоматически. Если все параметры фальсифицированы, атрибуты _doc__ являются Никто.

~docstring_options();

Effects

Восстанавливает предыдущее состояние вариантов докстринга. В частности, если экземпляры docstring_options находятся в вложенных C++-областях, параметры, эффективные в прилагающемся объеме, восстанавливаются. Если последний экземпляр docstring_options выходит из области действия, настройки по умолчанию «все включено» восстанавливаются.

void disable_user_defined();
void enable_user_defined();
void disable_signatures();
void enable_signatures();
void disable_py_signatures();
void enable_py_signatures();
void disable_cpp_signatures();
void enable_cpp_signatures();
void disable_all();
void enable_all();

Эти функции динамически изменяют внешний вид докстрингов в коде, который следует. *_user_defined() и *_signatures() Функции-члены предусмотрены для мелкозернистого управления. Функции *_all() являются удобными ярлыками для одновременного управления всеми настройками.

#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include <boost/python/docstring_options.hpp>
void foo() {}
BOOST_PYTHON_MODULE(demo)
{
    using namespace boost::python;
    docstring_options doc_options(DEMO_DOCSTRING_SHOW_ALL);
    def("foo", foo, "foo doc");
}

Если скомпилировать -DDEMO_DOCSTRING_SHOW_ALL=Правда:

>>> import demo
>>> print demo.foo.__doc__
foo() -> None : foo doc
C++ signature:
    foo(void) -> void

Если скомпилировать -DDEMO_DOCSTRING_SHOW_ALL=ложно:

>>> import demo
>>> print demo.foo.__doc__
None
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include <boost/python/args.hpp>
#include <boost/python/docstring_options.hpp>
int foo1(int i) { return i; }
int foo2(long l) { return static_cast<int>(l); }
int foo3(float f) { return static_cast<int>(f); }
int foo4(double d) { return static_cast<int>(d); }
BOOST_PYTHON_MODULE(demo)
{
    using namespace boost::python;
    docstring_options doc_options;
    def("foo1", foo1, arg("i"), "foo1 doc");
    doc_options.disable_user_defined();
    def("foo2", foo2, arg("l"), "foo2 doc");
    doc_options.disable_signatures();
    def("foo3", foo3, arg("f"), "foo3 doc");
    doc_options.enable_user_defined();
    def("foo4", foo4, arg("d"), "foo4 doc");
    doc_options.enable_py_signatures();
    def("foo5", foo4, arg("d"), "foo5 doc");
    doc_options.disable_py_signatures();
    doc_options.enable_cpp_signatures();
    def("foo6", foo4, arg("d"), "foo6 doc");
}

Код Python:

>>> import demo
>>> print demo.foo1.__doc__
foo1( (int)i) -> int : foo1 doc
C++ signature:
    foo1(int i) -> int
>>> print demo.foo2.__doc__
foo2( (int)l) -> int :
C++ signature:
    foo2(long l) -> int
>>> print demo.foo3.__doc__
None
>>> print demo.foo4.__doc__
foo4 doc
>>> print demo.foo5.__doc__
foo5( (float)d) -> int : foo5 doc
>>> print demo.foo6.__doc__
foo6 doc
C++ signature:
    foo6(double d) -> int
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include <boost/python/args.hpp>
#include <boost/python/docstring_options.hpp>
int foo1(int i) { return i; }
int foo2(long l) { return static_cast<int>(l); }
int bar1(int i) { return i; }
int bar2(long l) { return static_cast<int>(l); }
namespace {
    void wrap_foos()
    {
        using namespace boost::python;
        // no docstring_options here
        //   -> settings from outer C++ scope are in effect
        def("foo1", foo1, arg("i"), "foo1 doc");
        def("foo2", foo2, arg("l"), "foo2 doc");
    }
    void wrap_bars()
    {
        using namespace boost::python;
        bool show_user_defined = true;
        bool show_signatures = false;
        docstring_options doc_options(show_user_defined, show_signatures);
        def("bar1", bar1, arg("i"), "bar1 doc");
        def("bar2", bar2, arg("l"), "bar2 doc");
    }
}
BOOST_PYTHON_MODULE(demo)
{
    boost::python::docstring_options doc_options(false);
    wrap_foos();
    wrap_bars();
}

Код Python:

>>> import demo
>>> print demo.foo1.__doc__
None
>>> print demo.foo2.__doc__
None
>>> print demo.bar1.__doc__
bar1 doc
>>> print demo.bar2.__doc__
bar2 doc

PrevUpHomeNext

Статья boost/python/docstring_options.hpp раздела Boost.Python Reference Manual Chapter 2. High Level Components может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 2. High Level Components ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:54:02/0.007533073425293/0