如何让Swig生成Python代码而不是自由函数?
%module SimulatorAppWrapper
%{
#define SWIG_FILE_WITH_INIT
#include "SimulatorAppWrapper.hpp"
%}
%include "SimulatorAppWrapper.hpp"
我的包装器来源相当简单:
class SimulatorAppWrapper
{
public:
typedef std::map<const char*, const char*> ConfigSettings;
SimulatorAppWrapper();
~SimulatorAppWrapper();
void AddConfigKey(const char* k, const char* v);
int Run();
};
从这里我生成Swig源并使用以下链接进行链接: swig -python -c ++ SimulatorAppWrapper.i
但是,我检查构建模块,我得到以下内容,我有自由函数而不是像类:
>>> import SimulatorAppWrapper
>>> dir(_SimulatorAppWrapper)
['SWIG_PyInstanceMethod_New', 'SimulatorAppWrapper_AddConfigKey', 'SimulatorAppWrapper_Run', 'SimulatorAppWrapper_swigregister', '__doc__', '__file__', '__name__', '__package__', 'delete_SimulatorAppWrapper', 'new_SimulatorAppWrapper']
我希望能够做到以下几点:
simApp = SimulatorAppWrapper
simApp.Run()
答案 0 :(得分:1)
我看不出SWIG .i或你的.h。
有什么问题但是你的测试将是simApp = SimulatorAppWrapper()
(注意括号),然后是simApp.Run()
之前的分号或新行。
此外,您应该使用from SimulatorAppWrapper import SimulatorAppWrapper
,因为您已将模块命名为SimulatorAppWrapper
。
最后,dir(_SimulatorAppWrapper)
中不需要下划线。您看到的列表是SWIG包装函数的集合,在您创建实例等时会调用它们。例如,当您调用SimulatorAppWrapper()
时,这实际上会调用new_SimulatorAppWrapper()
。请尝试dir(SimulatorAppWrapper)
(原始代码中的dir()
在模块对象上,但如果您使用上面建议的“from import”,那么您的课程将为dir()
。