我有两个班,第一个叫“萝卜”,第二个叫“萝卜”。 所有代码都是用C++编写的,需要在Python中使用。在
Radish已经使用SWIG暴露于python;相反,radishont已经使用boost::python公开了。在
我需要将一个方法添加到具有以下语法的radishont类中:
Radish* get_radish()
{
return &radish;
}
其中“radish”是包含在radishont中的一个萝卜实例。在
当我执行python代码时,我收到以下异常:
^{pr2}$所以,我的问题是:如何在不使用SWIG重写radishont的情况下使这个方法在python中工作?在
我很确定你最好重写SWIG接口来包含新函数。SWIG使用与boost::pythons系统不兼容的类/函数的内部注册系统(或者至少不是现成的)。在
这个错误来自Boost.Python. BP的type表中没有Radish的条目。如果没有进入,英国石油公司就没有办法知道该怎么做。唯一的办法就是用BP包萝卜。在
恐怕BP和SWIG根本就不是为了合作而生的,而且非常怀疑你是否能让他们按照你想要的方式工作,而不是大规模的黑客攻击。在
我建议您将整个系统移到一个库或另一个库
最后,我做到了。在
我在boost python模块中创建了一个类实例,如下所示:
我创建了这样一个转换器函数:
^{pr2}$其中PySwigObject是这样的结构:
最后,我注册了我的转换器:
这非常有效,我可以从SWIG获取对象并将其传递给boost::python。逆过程还没有解决,但对我来说已经足够了。在
这是我用来寻找解决方案的指南: http://wiki.python.org/moin/boost.python/HowTo#SWIG_exposed_C.2B-.2B-_object_from_Python
相关问题 更多 >
编程相关推荐