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

ObjectWrapper

Boost , Boost.Python Reference Manual , Chapter 1. Concepts

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

Эта страница определяет две концепции, используемые для описания классов, которые управляют объектами Python и которые предназначены для поддержки использования с синтаксисом, подобным Python.

Модели концепции ObjectWrapper имеют объект в качестве общедоступного базового класса и используются для обеспечения специального поведения конструкции и/или дополнительной удобной функциональности через (часто шаблонные) функции-члены. За исключением случаев, когда возвращаемый тип R сам по себе является TypeWrapper, функция-член вызывает форму

x.some_function(a1, a2,...an)

семантика всегда эквивалентна:

extract<R>(x.attr("some_function")(object(a1), object(a2),...object(an)))()

(см. caveat ниже).

TypeWrapper - это уточнение ObjectWrapper, которое связано с конкретным типом Python X. Для данного TypeWrapper T, допустимое выражение конструктора

T(a1, a2,...an)

строит новый T-объект, управляющий результатом вызова X с аргументами, соответствующими

object(a1), object(a2),...object(an)

. При использовании в качестве аргументов для обертывания функций C++ или в качестве параметра шаблона для извлечения <> совпадением будут считаться только экземпляры соответствующего типа Python.

Результатом правил вызова специальной функции-члена, когда тип возврата является TypeWrapper, является то, что возвращенный объект может управлять объектом Python неподходящего типа. Обычно это не является серьезной проблемой; в худшем случае ошибки будут обнаружены во время выполнения немного позже, чем в противном случае. Для примера того, как это может произойти, обратите внимание, что функция dict items возвращает объект типа list. Теперь предположим, что пользователь определяет этот подкласс dict в Python:

>>> class mydict(dict):
...     def items(self):
...         return tuple(dict.items(self)) # return a tuple

Поскольку экземпляр mydict также является экземпляром dict, при использовании в качестве аргумента для обернутой функции C++ boost::python::dict может принимать объекты типа Python mydict. Вызывая items() на этом объекте, можно получить экземпляр boost::python::list, который фактически содержит Python tuple. Последующие попытки использовать методы list (например, append или любую другую мутирующую операцию) на этом объекте вызовут то же исключение, которое произошло бы, если бы вы попытались сделать это из Python.


PrevUpHomeNext

Статья ObjectWrapper раздела Boost.Python Reference Manual Chapter 1. Concepts может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. Concepts ::


реклама


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

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