如何在 python (SWIG) 中调用 C++ 成员函数?

How to call a C++ member function in python (SWIG)?

我想将我的 C++ 库 class 公开给 python,并且能够在 python 中调用 class 中包含的任何函数。 我的示例库如下所示:

#include "example_lib.h"

lib::lib(){};
int lib::test(int i){
return i;
}

与header:

class lib{
  lib();
  int test(int i);
};

我的界面文件:

/* example_lib.i */
%module example_lib
%{
   /* Put header files here or function declarations like below */
   #include "example_lib.h"
%}
%include "example_lib.h"

我运行以下命令:

swig3.0 -c++ -python example_lib.i 
g++ -c -fPIC example_lib.cc example_lib_wrap.cxx -I/usr/include/python3.8
g++ -shared -fPIC example_lib.o example_lib_wrap.o -o _example_lib.so

但是当我尝试调用成员函数时 example_lib.lib.test(1), 我只得到 type object 'lib' has no attribute 'test'。如何让 swig 也公开成员函数? 这似乎是一个非常基本的问题,但如果有人能澄清通常是如何完成的,我将不胜感激。

C++ 中的默认可访问性为 private,然后您需要将其移动到 public: 部分:

class lib{
  public:
    lib();
    int test(int i);
};

还要注意test是实例方法,需要实例化class.