我正在尝试使用C ++代码的python绑定(使用SWIG创建的绑定)获取“输出指针”(指针传递给用于输出数据而不是使用返回值的方法),其中输出指针是一个方法的一部分,该方法是发生跨语言多态的类的一部分(使用SWIG directors
特性)。
考虑以下示例:
// C++ code!
enum class AnEnum {
FIRST_VAL,
SECOND_VAL
}
class BaseClassCpp {
virtual void Test(AnEnum * anEnum) = 0;
}
在python中,我创建了一个继承自C ++基类的类:
# Python code!
class ChildClassPy(SwigWrapper.BaseClassCpp):
def Test(anEnum):
anEnum = SwigWrapper.AnEnum_FIRST_VAL
现在,回到C ++代码中,使用多态来调用python ChildClassPy
对象:
// C++ code!
BaseClassCpp * polyObject = (code that gets python ChildClassPy object back into C++)
AnEnum anEnum;
polyObject->Test(&anEnum); // Cross-language polymorphism! Requires SWIG "directors" feature
// ENUM IS NOT SET CORRECTLY TO FIRST_VAL
如何设置SWIG以便从Python中的子类中正确设置C ++中的anEnum
变量?
我认为解决方案的一部分是使用%typemap
功能,如下所示:
%typemap(directorargout) AnEnum * {
// What goes here?
}
我可能还必须使用directorin
类型地图。
不幸的是,导演样式图谱的文档很小(参见http://www.swig.org/Doc3.0/Python.html#Python_nn46的36.5.6类型图)