9

myenum.h に C の単純な列挙型があります。

enum MyEnum {
    ONE,
    TWO,
    THREE
};

問題は、これを Python にマップすると、MyEnum ではなく、モジュール名を介してのみ列挙型にアクセスできることです。したがって、値 ONE、TWO、THREE は、MyEnum に含まれるのではなく、私が定義する他の関数に含まれます。

私の api.i ファイルは次のとおりです。

%module api
%{
#include "myenum.h"
%}
%include "myenum.h"

SWIGで生成します

swig -builtin -python api.i

そしてそれをPythonにインポートします

import _api

そして、_api モジュールの列挙値を使用する必要があります。

_api.ONE
_api.TWO
_api.THREE

私はそれらを次のように使いたいのですが

_api.MyEnum.ONE
_api.MyEnum.TWO
_api.MyEnum.THREE

これを達成する方法を知っている人はいますか?

4

2 に答える 2

2

あなたが望むSWIG機能nspaceがありますが、残念ながらPythonではまだサポートされていません。SWIG で希望する方法で列挙型を表示するには、常に構造体で列挙型を定義する必要がありました。例:

%module tmp

%inline %{
struct MyEnum {
    enum { A,B,C };
};
%}

結果:

>>> import tmp
>>> tmp.MyEnum.A
0
>>> tmp.MyEnum.B
1
>>> tmp.MyEnum.C
2
于 2013-05-12T00:07:24.453 に答える