我试图获得“输出指针”(指针传入一个用于输出数据而不是使用返回值的方法),用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类型映射)
目前没有回答
相关问题 更多 >
编程相关推荐