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

boost/python/ptr.hpp

Boost , Boost.Python Reference Manual , Chapter 4. Function Invocation and Creation

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

определяет шаблон функции ptr(), который позволяет пользователям указывать, как преобразовывать значения указателей C++ в python в контексте реализации переопределяемых виртуальных функций, вызова объектов, вызывающих Python, или явного преобразования объектов C++ в Python. Обычно, при передаче указателей на обратные вызовы Python, указатель копируется, чтобы убедиться, что объект Python никогда не содержит висящей ссылки. Чтобы указать, что новый объект Python должен просто содержать копию указателя p, пользователь может передавать ptr(p) вместо того, чтобы передавать p напрямую. Этот интерфейс предназначен для отражения использования boost::ref(), который также может использоваться для предотвращения копирования референтов.

ptr(p) возвращает экземпляр<pointer_wrapper<>>, который может быть обнаружен с помощью<is_pointer_wrapper<>>метафункции;<unwrap_pointer<>>является метафункцией, которая извлекает исходный тип указателя из<pointer_wrapper<>>. Эти классы можно рассматривать как детали реализации.

template <class T>
pointer_wrapper<T> ptr(T x);

Requires

Т — это тип указателя.

Returns

pointer_wrapper(x)

Throws

Ничего.

«Конверт типа», который возвращается<ptr()>, используется для обозначения семантики ссылок для указателей, передаваемых обратной связи Python.

namespace boost { namespace python
{
    template<class Ptr> class pointer_wrapper
    {
     public:
        typedef Ptr type;
        explicit pointer_wrapper(Ptr x);
        operator Ptr() const;
        Ptr get() const;
    };
}}
typedef Ptr type;

Тип завернутого указателя.

explicit pointer_wrapper(Ptr x);

Requires

<Ptr>— тип указателя

Effects

<x>в<pointer_wrapper<>>причастии.

Throws

Ничего.

operator Ptr() const;
Ptr get() const;

Returns

копия хранимого указателя.

Rationale

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

Унарная метафункция, значение которой истинно, является указателем_wrapper<>.

namespace boost { namespace python
{
    template<class T> class is_pointer_wrapper
    {
        static unspecified value = ...;
    };
}}

Returns

<true>iff<T>является специализацией<pointer_wrapper<>>. значение является интегральной константой, конвертируемой в болт неопределенного типа

Унарная метафункция, которая извлекает обернутый тип указателя из специализации pointer_wrapper<>.

namespace boost { namespace python
{
    template<class T> class unwrap_pointer
    {
        typedef unspecified type;
    };
}}

Returns

<T::type>если<T>является специализацией<pointer_wrapper<>>,<T>в противном случае

Этот пример иллюстрирует использование ptr() для предотвращения копирования объекта:

#include <boost/python/call.hpp>
#include <boost/python/ptr.hpp>
class expensive_to_copy
{
   ...
};
void pass_as_arg(expensive_to_copy* x, PyObject* f)
{
   // call the Python function f, passing a Python object built around
   // which refers to *x by-pointer.
   //
   // *** Note: ensuring that *x outlives the argument to f() is    ***
   // *** up to the user! Failure to do so could result in a crash! ***
   boost::python::call<void>(f, ptr(x));
}
...

PrevUpHomeNext

Статья boost/python/ptr.hpp раздела Boost.Python Reference Manual Chapter 4. Function Invocation and Creation может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 4. Function Invocation and Creation ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 02:04:57/0.0041050910949707/0