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

Chapter 5. To/From Python Type Conversion

Boost , Boost.Python Reference Manual , Boost.Python Reference Manual

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

Chapter 5. To/From Python Type Conversion

Экспонирует механизм извлечения значений объекта C++ из обобщенных объектов Python. Обратите внимание, что Extract<...> также может быть использован для «нисходения» объекта к определенному ObjectWrapper. Поскольку ссылка на мутабельный тип питона с аргументом того же типа (например, list([1,2]), как правило, делает копию аргументированного объекта, это может быть единственным способом доступа к интерфейсу ObjectWrapper на исходном объекте.

Extract<T> может использоваться для извлечения значения произвольного типа C++ из экземпляра объект. Поддерживаются два использования:

  1. Extract<T>(o) является временным объектом, который неявно конвертируется в T (эксплицитное преобразование также доступно через оператора функции объекта). Однако, если нет конверсии, которая может конвертировать o в объект типа T, будет увеличено исключение Python TypeError.
  2. Extract<T>x(o); строит экстрактор, чья функция проверка() может быть использована для того, чтобы спросить, доступна ли конверсия без исключения.
namespace boost { namespace python
{
  template <class T>
  struct extract
  {
      typedef unspecified result_type;
      extract(PyObject*);
      extract(object const&);
      result_type operator()() const;
      operator result_type() const;
      bool check() const;
  };
}}
extract(PyObject* p);
extract(object const&);

Requires

Первая форма требует, чтобы p был ненулевым.

Effects

Хранит указатель на объект Python, управляемый его аргументом конструктора. В частности, контрольный счет объекта не увеличивается. Он должен быть уверен, что он не разрушается до того, как будет названа функция преобразования экстрактора.

result_type operator()() const;
operator result_type() const;

Effects

Преобразует сохраненный указатель в result_type, который является T или T const&.

Returns

Объект результата_типа, соответствующий тому, на который ссылается сохраненный указатель.

Throws

error_already_set и устанавливает TypeError, если такое преобразование отсутствует. Может также выделять другие неуказанные исключения, выброшенные конвертером, который фактически используется.

bool check() const;

Postconditions

Нет. В частности, обратите внимание, что возвратное значение истинного не исключает того, что исключение выбрасывается из результата_тип() или оператора(()).

Returns

ложные только в том случае, если нет конвертации из сохраненного указателя в T.

#include <cstdio>
using namespace boost::python;
int Print(str s)
{
   // extract a C string from the Python string object
   char const* c_str = extract<char const*>(s);
   // Print it using printf
   std::printf("%s\n", c_str);
   // Get the Python string's length and convert it to an int
   return extract<int>(s.attr("__len__")())
}

Следующий пример показывает, как экстракт может быть использован вместе с класс_<...> для создания и доступа к экземпляру завернутого класса C++.

struct X
{
   X(int x) : v(x) {}
   int value() { return v; }
 private:
   int v;
};
BOOST_PYTHON_MODULE(extract_ext)
{
    object x_class(
       class_<X>("X", init<int>())
          .def("value", &X::value))
          ;
    // Instantiate an X object through the Python interface. 
    // Its lifetime is now managed by x_obj.
    object x_obj = x_class(3);
    // Get a reference to the C++ object out of the Python object
    X& x = extract<X&>(x_obj);
    assert(x.value() == 3);
}

PrevUpHomeNext

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




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



:: Главная :: Boost.Python Reference Manual ::


реклама


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

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