Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SWIG和C++;:从另一个模块扩展类_C++_Python_Swig - Fatal编程技术网

C++ SWIG和C++;:从另一个模块扩展类

C++ SWIG和C++;:从另一个模块扩展类,c++,python,swig,C++,Python,Swig,我在SWIG/C++中遇到了一个无法解决的跨模块问题 让我们考虑一个包含一个C类的模块M1和一组它的方法。该模块由C++通过SWIG生成,其中M1是对应的共享库。 M1.py 我想用一个额外的方法S扩展这个CL类。我知道,如果在同一模块中进行扩展,则以下内容将起作用: 第一类 然而,我担心的是,扩展不能在M1模块中完成,它必须在模块M2的外部完成 我首先尝试了以下几点: M2.i 这将导致创建M2.py,其中包含CL方法和新方法。问题是CL不再是M1的CL,而是M2.CL: M2.py 调用CL

我在SWIG/C++中遇到了一个无法解决的跨模块问题

让我们考虑一个包含一个C类的模块M1和一组它的方法。该模块由C++通过SWIG生成,其中M1是对应的共享库。 M1.py

我想用一个额外的方法S扩展这个CL类。我知道,如果在同一模块中进行扩展,则以下内容将起作用:

第一类

然而,我担心的是,扩展不能在M1模块中完成,它必须在模块M2的外部完成

我首先尝试了以下几点:

M2.i

这将导致创建M2.py,其中包含CL方法和新方法。问题是CL不再是M1的CL,而是M2.CL:

M2.py

调用CL.Sth()在逻辑上失败,因为M2中没有定义Sth

然后我去了:

M2.i

这使得“import M1”指令出现在生成的M2.py中,但没有扩展方法,因此

cl = CL()
cl.SthElse() 
将在属性错误时失败


从现在起,我有点迷路,没有更多的想法。Swig文档没有什么帮助(或者我找不到正确的章节)。

您忘记启用director Swig功能了吗?请参阅文档,特别是

很抱歉,“Hi”已从我的邮件中消失。所以你好:)提前谢谢你的提示。
%{
#include "CL.h"
%}
%include "CL.h"
%extend CL {
    void SthElse() { return; }
}
%module M2
%{
#include "CL.h"
%}
%include "CL.i"

%extend CL {
  void SthElse() { return; }
}
class CL(_object):
    def Sth(*args): return _M2.CL_Sth(*args)
    def SthElse(*args): return _M2.CL_SthElse(*args)
%module M2
%{
#include "CL.h"
%}
%import(module="M1") "CL.h"

%extend CL {
  void SthElse() { return; }
}
cl = CL()
cl.SthElse()