我在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)
我已经做了很多搜索自动类型转换等但无济于事。任何帮助表示赞赏!