<R>- тип указателя, тип ссылки или полный тип с доступным конструктором копий.
Effects
<self.method(a1,a2,...an)>в Python, где<a1...an>являются аргументами против<call_method()>, преобразованы в объекты Python. Для полного семантического описания см. эту страницу.
Returns
Результат вызова Python, преобразованный в тип C++<R>.
Rationale
<call_method>имеет решающее значение для реализации виртуальных функций C++, которые являются преобладающими в Python.
Следующий C++ иллюстрирует использование<call_method>в обертке класса с виртуальной функцией, которая может быть переопределена в Python: C++ Определение модуля
#include<boost/python/module.hpp>#include<boost/python/class.hpp>#include<boost/utility.hpp>#include<cstring>// class to be wrappedclassBase{public:virtualcharconst*class_name()const{return"Base";}virtual~Base();};boolis_base(Base*b){return!std::strcmp(b->class_name(),"Base");}// Wrapper code begins hereusingnamespaceboost::python;// Callback classclassBase_callback:publicBase{public:Base_callback(PyObject*self):m_self(self){}charconst*class_name()const{returncall_method<charconst*>(m_self,"class_name");}charconst*Base_name()const{returnBase::class_name();}private:PyObject*constm_self;};usingnamespaceboost::python;BOOST_PYTHON_MODULE(my_module){def("is_base",is_base);class_<Base,Base_callback,noncopyable>("Base").def("class_name",&Base_callback::Base_name);}
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.