![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
boost/python/operators.hppBoost , Boost.Python Reference Manual , Chapter 2. High Level Components
|
C++ выражение |
Метод Python называется |
C++ Осуществление |
---|---|---|
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
В таблицах ниже, если<r
>имеет типself_t,<y
>является объектом того же типа, что и<x
>; если<l
>или<r
>является объектом типадругойy
>является объектом типа<T
>; в противном случае<y
>является объектом того же типа, что и<l
>или<r
>.<l
>никогда не является объектом типаself_t.
Колонка экспрессий Python иллюстрирует выражения, которые будут поддерживаться в Python для объектов, конвертируемых в типы x и y. Вторичная операция возникает из-за правил отражения Pythonдля богатых операторов сравнения и используется только тогда, когда соответствующая операция не определена как метод объекта y.
C++ выражение |
Метод Python называется |
C++ Осуществление |
Python Expression (первичная, вторичная) |
---|---|---|---|
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
Операции, названия которых начинаются с «__r» ниже, будут называться только в том случае, если левый операнд уже не поддерживает данную операцию, как описаноздесь.
C++ выражение |
Метод Python называется |
C++ Осуществление |
---|---|---|
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
C++ выражение |
Метод Python называется |
C++ Осуществление |
---|---|---|
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
C++ выражение |
Метод Python называется |
C++ Осуществление |
---|---|---|
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
< |
Случаи<other<T>
>могут быть использованы в операторских выражениях ся; результат эквивалентен тому же выражению с<T
>объектом вместо<other<T>
>. Используйте<other<T>
>для предотвращения строительства<T
>объекта в случае, если он тяжеловесен, когда нет конструктора или просто для ясности.
namespace boost { namespace python { template <class T> struct other { }; }}
Обоснования<detail::operator_<>
>используются в качестве возвратного типа операторских выражений с участиемсам. Это следует рассматривать как деталь реализации и документируется здесь только как способ показать, как результат самовыражения соответствует вызовам<class_<>::def()
>.
namespace boost { namespace python { namespace detail { template <unspecified> struct operator_ { }; }}}
namespace boost { namespace python { using self_ns::self; }}
#include <boost/python/module.hpp> #include <boost/python/class.hpp> #include <boost/python/operators.hpp> #include <boost/operators.hpp> struct number : boost::integer_arithmetic<number> { explicit number(long x_) : x(x_) {} operator long() const { return x; } template <class T> number& operator+=(T const& rhs) { x += rhs; return *this; } template <class T> number& operator-=(T const& rhs) { x -= rhs; return *this; } template <class T> number& operator*=(T const& rhs) { x *= rhs; return *this; } template <class T> number& operator/=(T const& rhs) { x /= rhs; return *this; } template <class T> number& operator%=(T const& rhs) { x %= rhs; return *this; } long x; }; using namespace boost::python; BOOST_PYTHON_MODULE(demo) { class_<number>("number", init<long>()) // interoperate with self .def(self += self) .def(self + self) .def(self -= self) .def(self - self) .def(self *= self) .def(self * self) .def(self /= self) .def(self / self) .def(self %= self) .def(self % self) // Convert to Python int .def(int_(self)) // interoperate with long .def(self += long()) .def(self + long()) .def(long() + self) .def(self -= long()) .def(self - long()) .def(long() - self) .def(self *= long()) .def(self * long()) .def(long() * self) .def(self /= long()) .def(self / long()) .def(long() / self) .def(self %= long()) .def(self % long()) .def(long() % self) ; }
Статья boost/python/operators.hpp раздела Boost.Python Reference Manual Chapter 2. High Level Components может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 2. High Level Components ::
реклама |