如何使用SWIG从C ++中调用在python中重写的虚方法

时间:2016-02-24 16:48:34

标签: swig

我的C ++课程:

 SELECT x.*
      , SUM(y.sales) 
   FROM my_table x 
   JOIN my_table y 
     ON y.date BETWEEN x.date - INTERVAL 3-1 DAY 
    AND x.date GROUP BY x.date;

在python模块中,我有一个派生自上面的类并覆盖foo。

class Base {
public:
virtual void foo(int);
};

然后我使用python模块中定义的工厂方法创建此派生类的对象,如下所示:

class PyDerived(Base):
 ...
 def foo(self):
   ...

使用C ++代码中的这个PyObject,我想调用foo,我想要在python模块中执行foo。这可能吗?如果是这样的话?

(我已经尝试从python调用虚拟方法,将实际调用分派给C ++方法,但这与我的要求不符)

1 个答案:

答案 0 :(得分:1)

是的,您需要启用SWIG"导演"包含Base方法的类virtual的功能。您可以在文档here中阅读相关内容。

文档将告诉您需要向SWIG界面文件添加两项内容:

  1. 在一开始,编辑%module指令以完全启用导演:

    %module(directors="1") your_modulename

  2. 在声明类Base或相应的%include指令之前,请输入以下内容以启用该类的控制器功能:

    %feature("director") Base;