![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
boost/python/to_python_converter.hppBoost , Boost.Python Reference Manual , Chapter 5. To/From Python Type Conversion
|
Параметр |
Требования |
Описание |
---|---|---|
T |
Тип C++ исходного объекта в преобразовании |
|
Конверсия |
|
Тип класса, статическое преобразование функции члена которого выполняет реальную работу преобразования. |
bool has_get_pytype=false |
|
Факультативный элемент - если для этих параметров Conversion имеет |
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();
Регистрирует преобразователь 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'>
Статья 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 ::
реклама |