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

boost/python/handle.hpp

Boost , Boost.Python Reference Manual , Chapter 7. Utility and Infrastructure

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

предоставляет шаблон классов handle, интеллектуальный указатель для управления объектами Python с исходным кодом.

handle является умным указателем на тип объекта Python; он содержит указатель типа T*, где T является параметром шаблона. T должен быть либо типом, полученным из PyObject, либо типом POD, начальный sizeof(PyObject) байты компоновки совместимы с PyObject. Используйте handle<> на границе между API Python/'C' и высокоуровневым кодом; предпочтите объект для обобщенного интерфейса объектам Python.

В этом документе термин «upcast» относится к операции, которая преобразует указатель Y в базовый класс pointerT через static_cast<T>, если Y получен из T, или через каст в стиле C (T), если это не так. Однако в последнем случае «подкаст» плохо формируется, если начальный размер (PyObject) байты Y не совместимы с макетом PyObject.

namespace boost { namespace python
{
  template <class T>
  class handle
  {
      typedef unspecified-member-function-pointer bool_type;
   public: // types
      typedef T element_type;
   public: // member functions
      ~handle();
      template <class Y>
      explicit handle(detail::borrowed<null_ok<Y> >* p);
      template <class Y>
      explicit handle(null_ok<detail::borrowed<Y> >* p);
      template <class Y>
      explicit handle(detail::borrowed<Y>* p);
      template <class Y>
      explicit handle(null_ok<Y>* p);
      template <class Y>
      explicit handle(Y* p);
      handle();
      handle& operator=(handle const& r);
      template<typename Y>
      handle& operator=(handle<Y> const & r); // never throws
      template <typename Y>
      handle(handle<Y> const& r);
      handle(handle const& r);
      T* operator-> () const;
      T& operator* () const;
      T* get() const;
      void reset();
      T* release();
      operator bool_type() const; // never throws
   private:
      T* m_p;
  };
  template <class T> struct null_ok;
  namespace detail { template <class T> struct borrowed; }
}}
virtual ~handle();

Effects

Py_XDECREF(upcast<PyObject*>(m_p))

template <class Y>
explicit handle(detail::borrowed<null_ok<Y> >* p);

Effects
Py_XINCREF(upcast<PyObject*>(p));
m_p = upcast<T*>(p);
template <class Y>
explicit handle(null_ok<detail::borrowed<Y> >* p);

Effects
Py_XINCREF(upcast<PyObject*>(p));
      m_p = upcast<T*>(p);
template <class Y>
explicit handle(detail::borrowed<Y>* p);

Effects
Py_XINCREF(upcast<PyObject*>(p));
      m_p = upcast<T*>(expect_non_null(p));
template <class Y>
explicit handle(null_ok<Y>* p);

Effects

m_p =upcast<T*>(p);<17

template <class Y>
explicit handle(Y* p);

Effects

m_pupcast<T*>(expect_non_null(p));

handle();

Effects

m_p = 0;

template <typename Y>
handle(handle<Y> const& r);
handle(handle const& r);

Effects

m_p = r.m_p; Py_XINCREF(upcast(m_p);

handle& operator=(handle const& r);
template<typename Y>
handle& operator=(handle<Y> const & r); // never throws

Effects

Py_XINCREF(PyObject*>(r);Py_XDECREF(upcast<PyObject>(m_p;

T* release();

Effects

Tm_p;m_p=

void reset();

Effects

*this=handle<T>();

T* operator-> () const;
T* get() const;

Returns

m_p;

T& operator* () const;

Returns

*m_p;

operator bool_type() const; // never throws

Returns

0 если m_p<2 == 0, указатель, конвертируемый в истинное в противном случае.

template <class T>
detail::borrowed<T>* borrowed(T* p)
{
    return (detail::borrowed<T>*)p;
}
template <class T>
null_ok<T>* allow_null(T* p)
{
    return (null_ok<T>*)p;
}

PrevUpHomeNext

Статья boost/python/handle.hpp раздела Boost.Python Reference Manual Chapter 7. Utility and Infrastructure может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 7. Utility and Infrastructure ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 22:07:51/0.0091829299926758/1