繁体   English   中英

Boost :: python-在python中的类对象上填充指针的C ++向量

[英]Boost::python - filling a C++ vector of pointer on object of a class in python

这是我的问题。 我应该做一个能够在C ++代码类的对象上填充指针的C ++向量的python代码。 我正在使用Boost :: Python。 看起来如下:

C ++代码:

class A_Base {}
class A_derived_1 {}
...
class A_derived_N {}

class B {
...
setAderivediList(vector<A *> &_AderivedList){}
}

我需要在Python中执行的操作:

B.setAderivediList(_AderivedList)

我无法修改C ++代码中的方法,只能在#ifdef python_interface之间添加其他对象,以免影响其他开发人员的工作。 刚开始,我尝试使用我在Internet上找到的转换器编写一个转换器,但未能使它适用于我的代码。 然后,我尝试在类B中添加一个_AderivedList和一个填充向量的设置器。 尽管它是用C ++编译的,但在Python中却无法使用。

新B类:

class B {
...
setAderivediList(vector<A *> &_AderivedList){}
#ifdef myPython_code
public:
  vector<A *> * _AderivedListPy;
  setAListPy(A * &my_Aderived){       //Actually, I tried without the reference as well
  this->_AderivedListPy->push_back(my_Aderived);
};
#endif
}

在python中变成:

myB = mydll.B()
Ai = mydll.A_derived_i()
myB.setAListPy(Ai) #stopping here
myB.setAderivediList(myB._AderivedListPy)

如果使用引用,它将在myB.setAListPy(Ai)处引发“ python参数类型与C ++签名不匹配”错误消息,如果没有引用,它将在同一行停止而不引发任何错误消息。 关于如何改进此方法或任何其他方法的任何线索? 先感谢您。

实际上,我找到了解决问题的方法。 通过直接在setAListPy中填充向量(包括调用setAderivediList)。 我只是将一个int my_A_derived传递给setAListPy(实际上,以及所有A_derived类构造函数所需的其他arg),然后在my_A_derived上使用if条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM