我最近开始使用swig包装我的一个C ++库。我想在Python中使用此代码,到目前为止效果很好。问题在于Python不知道包装函数返回哪些对象。当然,我仍然可以在返回的对象上调用方法,因为我知道它的类型,但是我不能以这种方式使用智能感知。该python代码旨在供其他人使用,如果一个人不知道返回类型,此问题会使编码变得更加困难。
这是这些方法之一:
def CreateJoinRequestMessage(self) -> "Hive::SC_Message":
return _Hive.SC_MessageHandler_CreateJoinRequestMessage(self)
它返回一个SC_Message对象。 SC_Message类也在SWIG生成的python代码中定义,如下所示:
class SC_Message(object):
thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
__repr__ = _swig_repr
def __init__(self, messageString: "std::string const &", messageType: "Hive::SC_MessageType const &"):
_Hive.SC_Message_swiginit(self, _Hive.new_SC_Message(messageString, messageType))
def GetContent(self) -> "std::string":
return _Hive.SC_Message_GetContent(self)
def GetMessageType(self) -> "Hive::SC_MessageType":
return _Hive.SC_Message_GetMessageType(self)
__swig_destroy__ = _Hive.delete_SC_Message
_Hive.SC_Message_swigregister(SC_Message)
所以使用智能感知时,我应该真正能够看到GetContent()方法。当我将生成的Python代码中的函数注释更改为“ SC_Message”时,一切正常。是SWIG的这种预期行为,还是SWIG还能产生更多有用的注释?没有-py3
选项,将没有注释。
我的SWIG命令如下:
swig -c++ -python -py3 hive.i
这是我的SWIG文件:
%module Hive
%{
#define SWIG_FILE_WITH_INIT
#include "include/hive/PieceType.hpp"
#include "include/hive/MoveType.hpp"
#include "include/hive/AxialPosition.hpp"
#include "include/hive/Color.hpp"
#include "include/hive/neighbourMap.hpp"
#include "include/hive/Piece.hpp"
#include "include/hive/Player.hpp"
#include "include/hive/PieceStack.hpp"
#include "include/hive/globals.hpp"
#include "include/hive/Move.hpp"
#include "include/hive/board.hpp"
#include "include/hive/gameState.hpp"
#include "include/communication/SC_MessageType.hpp"
#include "include/communication/SC_Message.hpp"
#include "include/communication/SC_MessageHandler.hpp"
#include "include/hive/benchmark/benchmark.hpp"
%}
%include "std_string.i"
%include "std_array.i"
%include "std_pair.i"
%include "std_vector.i"
%include "include/hive/PieceType.hpp"
%include "include/hive/MoveType.hpp"
%include "include/hive/AxialPosition.hpp"
%include "include/hive/Color.hpp"
%include "include/hive/neighbourMap.hpp"
%include "include/hive/Piece.hpp"
%include "include/hive/Player.hpp"
%include "include/hive/PieceStack.hpp"
%include "include/hive/globals.hpp"
%include "include/hive/Move.hpp"
%include "include/hive/board.hpp"
%include "include/hive/gameState.hpp"
%include "include/communication/SC_MessageType.hpp"
%include "include/communication/SC_Message.hpp"
%include "include/communication/SC_MessageHandler.hpp"
%include "include/hive/benchmark/benchmark.hpp"
提前感谢。
似乎SWIG通常会生成具有c和c ++类型的注释。据我所知,这将在2.0版中解决。有关更多信息,请单击此处https://github.com/SimpleITK/SimpleITK/issues/809