我寄存器,其将2维NumPy的阵到特征矩阵(称为DenseMatrix)的转换器:自动转换,以提高的shared_ptr在升压蟒
boost::python::converter::registry::push_back(
&convertible,
&construct,
boost::python::type_id<DenseMatrix>()
);
如果我有一个函数接受DenseMatrix对象和将它导出到Python我可以使用NumPy-Array从Python中调用它。
Boost.Python.ArgumentError: Python argument types in
libNSM.takeReference(numpy.ndarray)
did not match C++ signature:
takeReference(Eigen::Matrix<double, -1, -1, 1, -1, -1> {lvalue})
我不: 在另一方面,如果我有一个函数接受一个boost :: shared_ptr的(或指针或引用),并将其导出到Python从Python中调用它,当我得到这样一个错误不想写一个从NumPy-Array到boost :: shared_ptr的显式转换器。有没有更好的方法来解决这个问题?
下面是相应的代码,仅仅是明确的:
void takeObject(DenseMatrix m) {
// ...
}
void takePointer(DenseMatrix* ptr) {
// ...
}
void takeReference(DenseMatrix* ptr) {
// ...
}
void takeSharedPointer(boost::shared_ptr<DenseMatrix> ptr) {
// ...
}
BOOST_PYTHON_MODULE(boostModule) {
def("takeObject", &takeObject);
def("takePointer", &takePointer);
def("takeReference", &takeReference);
def("takeSharedPointer", &takeSharedPointer);
}
如此看来,一个人必须提供一个明确的转换,以一个boost :: shared_ptr的。我真的希望boost :: python中会有一个隐式转换器。 @Tanner:非常感谢您的详细解答! – bennihepp