将Python对象传递给函数时不会发生隐式基本转换

时间:2015-04-23 02:55:43

标签: python c++ c++11 boost boost-python

我在Boost.Python冒险中遇到了一个令人讨厌的障碍。

我正在尝试将派生类GuiState传递给一个函数,该函数将shared_ptr传递给它的父类State

我认为会发生某种自动转换,但我显然错了!

这是State的Boost.Python类定义:

    class_<state_t, std::shared_ptr<state_t>, noncopyable>("State", init<>());

GuiState

    class_<gui_state_t, bases<state_t>, std::shared_ptr<gui_state_t>, noncopyable>("GuiState", init<>());

StateMgr

    class_<state_mgr_t, noncopyable>("StateMgr", no_init)
        .def("push", &state_mgr_t::push);
因此,

state_mgr_t::push的函数签名是:

void push(const std::shared_ptr<state_t>& state, unsigned char link_flags);

然后我可以运行以下脚本:

from mandala import *

states.push(State(), STATE_FLAG_ALL) #runs fine
states.push(GuiState(), STATE_FLAG_ALL) #error below

最后一行产生以下错误:

Python argument types in
    StateMgr.push(StateMgr, GuiState, int)
did not match C++ signature:
    push(struct mandala::state_mgr_t {lvalue}, class std::shared_ptr<struct mandala::state_t>, unsigned char)

我已经做了很多搜索自动类型转换等但无济于事。任何帮助表示赞赏!

0 个答案:

没有答案