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

boost/python/instance_holder.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

предоставляет класс instance_holders, базовый класс для типов, которые держат C++ экземпляры обернутых классов.

instance_holders является абстрактным базовым классом, чьи конкретные производные классы содержат C++ классовые экземпляры в своих обертках объектов Python. Чтобы разрешить множественное наследование на Python из оберток класса C ++, каждый такой объект Python содержит цепочку обладателей экземпляра. Когда используется функция __init__ для завернутого класса C++, в объекте Python создается и устанавливается новый экземпляр instance_holders с использованием функции install(). Каждый конкретный класс, полученный от instance_holders, должен обеспечить holds() реализация, которая позволяет увеличить. Python, чтобы запросить его для типа(ов), который он удерживает. Для того, чтобы поддержать завернутый конструктор(ы), класс также должен предоставить конструкторам, которые могут принять первоначальный PyObject* аргумент, касающийся владения объектом Python, и которые передают оставшуюся часть своих аргументов конструктору удерживаемого типа. Первоначальный аргумент необходим для того, чтобы виртуальная функция была переопределена на Python, и может быть проигнорирован, в зависимости от конкретного подкласса instance_holders.

namespace boost { namespace python
{
  class instance_holder : noncopyable
  {
   public:
      // destructor
      virtual ~instance_holder();
      // instance_holder modifiers
      void install(PyObject* inst) throw();
      // instance_holder observers
      virtual void* holds(type_info) = 0;
  };
}}
virtual ~instance_holder();

Effects

уничтожает объект

void install(PyObject* inst) throw();

Requires

inst является экземпляром Python завернутого типа класса C++ или типом, полученным из завернутого типа класса C++.

Effects

устанавливает новый экземпляр во главе цепочки удерживаемых экземпляров объекта Python.

Throws

ничего

virtual void *holds(type_info x) = 0;

Returns

Указатель на объект типа, описанный x, если *это содержит такой объект, 0 иначе.

Ниже приведена упрощенная версия шаблона держателя экземпляра, используемого Boost. Python для обертывания классов, удерживаемых умными указателями:

template <class SmartPtr, class Value>
struct pointer_holder : instance_holder
{
   // construct from the SmartPtr type
   pointer_holder(SmartPtr p)
       :m_p(p)
   // Forwarding constructors for the held type
   pointer_holder(PyObject*)
       :m_p(new Value())
   {
   }
   template<class A0>
   pointer_holder(PyObject*,A0 a0)
       :m_p(new Value(a0))
   {
   }
   template<class A0,class A1>
   pointer_holder(PyObject*,A0 a0,A1 a1)
       :m_p(new Value(a0,a1))
   {
   }
   ...
 private: // required holder implementation
   void* holds(type_info dst_t)
   {
       // holds an instance of the SmartPtr type...
       if (dst_t == python::type_id<SmartPtr>())
           return &this->m_p;
       // ...and an instance of the SmartPtr's element_type, if the
       // pointer is non-null
       return python::type_id<Value>() == dst_t ? &*this->m_p : 0;
   }
 private: // data members
   SmartPtr m_p;
};

PrevUpHomeNext

Статья boost/python/instance_holder.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-07-05 03:22:05/0.0040249824523926/0