повышение :: питона :: return_value_policy() является слабым в питоне? - PullRequest
1 голос
/ 19 марта 2011

Я использовал boost::python в прошлом, но эта проблема поставила меня в тупик.Вот часть класса, с которой у меня проблемы:

class Entity
{
public:
    Entity();
    ~Entity();

    //Call to check our collider against all entities that have "tag"
    Collider* Collide(const std::string &tag);
};

, а вот код boost::python:

bp::class_< Entity_wrapper >( "Entity", bp::init< >() )    
        .def( 
            "Collide"
            , (::Monocle::Collider * ( ::Monocle::Entity::* )( ::std::string const & ) )( &::Monocle::Entity::Collide )
            , ( bp::arg("tag") ),
            bp::return_value_policy<bp::reference_existing_object>() )

В Python, если я сделаю что-то вроде этого:

collider = entity.Collision("Paddle")

collider является слабой ссылкой на type, а не Collider.Мои другие функции, которые возвращают указатели, кажутся хорошими.Это просто политика вызовов, которую я использую?Что делает Collide, так это вызывает статическую функцию («Collide») класса Collision, которая, в свою очередь, возвращает Collider * в случае успеха и NULL в противном случае.

Любая помощь приветствуется!Если вам нужна дополнительная информация, дайте мне знать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...