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

boost/python/wrapper.hpp

Boost , Boost.Python Reference Manual , Chapter 2. High Level Components

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

Чтобы обернуть класс T таким, что его виртуальные функции могут быть «переопределены в Python»— так что соответствующий метод производного класса Python будет называться, когда виртуальная функция используется из C++— вы должны создать класс обертывания C++, полученный из T, который переназначает эти виртуальные функции, чтобы они вызвали на Python. Этот заголовок содержит классы, которые могут быть использованы для облегчения этой работы.

Включает в себя верхнюю решетку Python виртуальной функции C++. Переопределительный объект либо имеет значимый объект Python, либо None.

namespace boost
{
  class override : object
  {
   public:
      unspecified operator() const;
      template <class A0>
      unspecified operator(A0) const;
      template <class A0, class A1>
      unspecified operator(A0, A1) const;
      ...
      template <class A0, class A1, ...class An>
      unspecified operator(A0, A1, ...An) const;
  };
};
unspecified operator() const;
template <class A0>
unspecified operator(A0) const;
template <class A0, class A1>
unspecified operator(A0, A1) const;
...
template <class A0, class A1, ...class An>
unspecified operator(A0, A1, ...An) const;

Effects

Если * это имеет значимый объект Python, он используется с указанными аргументами в порядке, указанном здесь. В противном случае бросает error_already_set.

Returns

Объект неопределенного типа, который держит результат Python вызова и, при преобразовании в C++ типа R, пытается преобразовать этот объект результата в R. Если это преобразование терпит неудачу, бросает error_already_set.

Получение класса обертывания от обоих T и wrapper<T> делает написание этого класса проще.

namespace boost
{
  class wrapper
  {
   protected:
      override get_override(char const* name) const;
  };
};
override get_override(char const* name) const;

Requires

имя ntbs.

Returns

Если *этот является субобъектом базового класса C++ производного классного экземпляра Python, который переопределяет названную функцию, возвращает определяющий объект, который делегирует на верхнюю часть Python. В противном случае возвращается определяющий объект, который удерживает None.

#include <boost/python/module.hpp>
#include <boost/python/class.hpp>
#include <boost/python/wrapper.hpp>
#include <boost/python/call.hpp>
using namespace boost::python;
// Class with one pure virtual function
struct P
{
    virtual ~P(){}
    virtual char const* f() = 0;
    char const* g() { return "P::g()"; }
};
struct PCallback : P, wrapper<P>
{
    char const* f()
    {
        return this->get_override("f")();
    }
};
// Class with one non-pure virtual function
struct A
{
    virtual ~A(){}
    virtual char const* f() { return "A::f()"; }
};
struct ACallback :  A, wrapper<A>
{
    char const* f()
    {
        if (override f = this->get_override("f"))
            return f();
        return A::f();
    }
    char const* default_f() { return this->A::f(); }
};
BOOST_PYTHON_MODULE_INIT(polymorphism)
{
    class_<PCallback,boost::noncopyable>("P")
        .def("f", pure_virtual(&P::f))
        ;
    class_<ACallback,boost::noncopyable>("A")
        .def("f", &A::f, &ACallback::default_f)
        ;
}

PrevUpHomeNext

Статья boost/python/wrapper.hpp раздела Boost.Python Reference Manual Chapter 2. High Level Components может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 2. High Level Components ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 07:29:46/0.0063920021057129/0