如何在 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.
我想将我的 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.