SWIG跨语言多态(导演)和输出指针

时间:2017-09-06 00:29:06

标签: python c++ pointers polymorphism swig

我正在尝试使用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类型图)

0 个答案:

没有答案