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

boost/python/to_python_converter.hpp

Boost , Boost.Python Reference Manual , Chapter 5. To/From Python Type Conversion

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

to_python_converter регистрирует преобразование из объектов данного типа C++ в объект Python.

to_python_converter добавляет обертку вокруг функции статического элемента своего второго параметра шаблона, обрабатывая детали низкого уровня, такие как вставка в реестр преобразователя.

В приведенной ниже таблице x обозначает объект типа T

Параметр

Требования

Описание

T

Тип C++ исходного объекта в преобразовании

Конверсия

PyObject::конвертировать(x, еслиp==0, PyErr_Occurred() != 0.

Тип класса, статическое преобразование функции члена которого выполняет реальную работу преобразования.

bool has_get_pytype=false

PyTypeObject const * p = Conversion::get_pytype()

Факультативный элемент - если для этих параметров Conversion имеет get_pytype элемент питания true. При наличии get_pytype используется для документирования возвращаемого типа функций с использованием этого преобразования. get_pytype может быть реализован с использованием классов и функций из pytype_function.hpp ПРИМЕЧАНИЕ: Для обратной совместимости этот параметр может быть пропущен после проверки определения BOOST_PYTHON_SUPPORTS_PY_SIGNATURES (см. здесь ).

namespace boost { namespace python
{
  template <class T, class Conversion, bool convertion_has_get_pytype_member=false>
  struct to_python_converter
  {
      to_python_converter();
  };
}}
to_python_converter();

Effects

Регистрирует преобразователь to_python, который использует Conversion::convert() для выполнения своей работы.

В этом примере предполагается, что кто-то внедрил стандартный модуль кивок из документации Python и поместил соответствующие декларации в «noddy.h». Потому что noddy Кодди Объект является конечным тривиальным типом расширения, пример немного надуманный: он обертывает функцию, для которой вся информация содержится в типе ее обратного значения.

В C++:

#include <boost/python/reference.hpp>
#include <boost/python/module.hpp>
#include "noddy.h"
struct tag {};
tag make_tag() { return tag(); }
using namespace boost::python;
struct tag_to_noddy
{
    static PyObject* convert(tag const& x)
    {
        return PyObject_New(noddy_NoddyObject, &noddy_NoddyType);
    }
    static PyTypeObject const* get_pytype()
    {
        return &noddy_NoddyType;
    }
};
BOOST_PYTHON_MODULE(to_python_converter)
{
    def("make_tag", make_tag);
    to_python_converter<tag, tag_to_noddy, true>(); //"true" because tag_to_noddy has member get_pytype
}

В Python:

>>> import to_python_converter
>>> def always_none():
...     return None
...
>>> def choose_function(x):
...     if (x % 2 != 0):
...         return to_python_converter.make_tag
...     else:
...         return always_none
...
>>> a = [ choose_function(x) for x in range(5) ]
>>> b = [ f() for f in a ]
>>> type(b[0])
<type 'NoneType'>
>>> type(b[1])
<type 'Noddy'>
>>> type(b[2])
<type 'NoneType'>
>>> type(b[3])
<type 'Noddy'>

PrevUpHomeNext

Статья boost/python/to_python_converter.hpp раздела Boost.Python Reference Manual Chapter 5. To/From Python Type Conversion может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 5. To/From Python Type Conversion ::


реклама


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

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