我正在尝试将这两个转换器添加到我的python boost-library版本中。
std::tr1::shared_ptr<sbcp::Device> cast_pointer_motor(std::tr1::shared_ptr<sbcp::amarsi::MotorDriver> driver){
return std::tr1::static_pointer_cast<sbcp::Device>(driver);
}
std::tr1::shared_ptr<sbcp::Device> cast_pointer_power(std::tr1::shared_ptr<sbcp::amarsi::Power> driver){
return std::tr1::static_pointer_cast<sbcp::Device>(driver);
}
def("deviceMotorPtrCast",&cast_pointer_motor);
def("devicePowerPtrCast",&cast_pointer_power);
它们几乎相同,只是函数参数中的模板不同。
但是,在python中加载这个库时,我得到了异常:
test.py:1: RuntimeWarning: to-Python converter for std::tr1::shared_ptr<sbcp::Device> already registered; second conversion method ignored.
导致这种情况进一步下降
TypeError: No to_python (by-value) converter found for C++ type: std::tr1::shared_ptr<sbcp::amarsi::Power>
那么,我怎么能说服那两个转换器实际上不同呢?我做错了什么?