[英]how to use enum in swig with python?
I have a enum declaration as follows:我有一个枚举声明如下:
typedef enum mail_ {
Out = 0,
Int = 1,
Spam = 2
} mail;
Function:功能:
mail status;
int fill_mail_data(int i, &status);
In the function above, status
gets filled up and will send.在上面的函数中, status
被填满并发送。
When I am trying this through swig I am facing the following issues:当我通过 swig 尝试这个时,我面临以下问题:
mail
.它没有显示mail
详细信息。 When I try to print mail.__doc__
or help(mail)
, it is throwing an error saying there is no such Attribute, though though i am able to use those values ( Spam
, In
, and Out
).当我尝试打印mail.__doc__
或help(mail)
,它会抛出一个错误,指出没有这样的属性,尽管我可以使用这些值( Spam
、 In
和Out
)。main
is, so it is not accepting any function arguments for that mail
.如上所示,Swig 不知道main
是什么,因此它不接受该mail
任何函数参数。To SWIG, an enum
is just an integer.对于 SWIG, enum
只是一个整数。 To use it as an output parameter as in your example, you also can declare the parameter as an output parameter like so:要将其用作示例中的输出参数,您还可以将参数声明为输出参数,如下所示:
%module x
// Declare "mail* status" as an output parameter.
// It will be returned along with the return value of a function
// as a tuple if necessary, and will not be required as a function
// parameter.
%include <typemaps.i>
%apply int *OUTPUT {mail* status};
%inline %{
typedef enum mail_ {
Out = 0,
Int = 1,
Spam = 2
} mail;
int fill_mail_data(int i, mail* status)
{
*status = Spam;
return i+1;
}
%}
Use:使用:
>>> import x
>>> dir(x) # Note no "mail" object, just Int, Out, Spam which are ints.
['Int', 'Out', 'Spam', '__builtins__', '__cached__', '__doc__', '__file__', '__initializing__', '__loader__', '__name__', '__package__', '_newclass', '_object', '_swig_getattr', '_swig_property', '_swig_repr', '_swig_setattr', '_swig_setattr_nondynamic', '_x', 'fill_mail_data']
>>> x.fill_mail_data(5)
[6, 2]
>>> ret,mail = x.fill_mail_data(5)
>>> mail == x.Spam
True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.