SWIG跨语言多态性(控制器)和输出指针

2024-06-28 11:03:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图获得“输出指针”(指针传入一个用于输出数据而不是使用返回值的方法),用C++代码的python绑定(使用SWIG创建的绑定)来处理,其中输出指针是方法的一部分,该方法是发生跨语言多态性的类的一部分(使用SWIGdirectors特性)。你知道吗

考虑以下示例:

// 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 ^ {< CD2>}对象使用多态调用:

// 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++中的^ {CD3>}变量?

我认为部分解决方案是使用%typemap特性,如下所示:

%typemap(directorargout) AnEnum * {
    // What goes here?
}

我可能还需要使用directorin类型映射。你知道吗

不幸的是,关于控制器样式类型映射的文档非常少(参见http://www.swig.org/Doc3.0/Python.html#Python_nn46中的36.5.6类型映射)


Tags: 方法代码test类型codeval特性class