3

Python 3.3 と SWIG 2.0.10 を使用して、派生クラスを基本クラスを取る関数に渡しています。

同じ SWIG .i ファイルが C# に使用されており、うまく機能します。ただし、Python では、SWIG は、派生型を受け入れる C++ メソッドはなく、基本型を受け入れるメソッドしかないと報告しています。そのステートメントは正しいですが、派生型を渡し、それが基本型であるかのように SWIG に呼び出しを指示させる必要があります。

派生型は C++ には存在しません。Python (および C#) にのみ存在します。ただし、ディレクターを有効にしており、前述のように C# で正常に動作しています。

Python 2.6 と 2.7 で同じ結果になります。

C++

class Base {};
// Note: there is NO "class Derived" in C++.
void f(Base* a) { ... }

パイソン

class Derived(Base): pass

x = Derived()
f(x) # SWIG runtime error - In C++ there is no f(Derived*) - there is only f(Base*)
4

1 に答える 1

4

問題は、Derived クラスで Base.__init__() を適切に呼び出さなかったことです。

それを修正すると、Swig のポリモーフィズムが機能しました。

class Derived(Base):
    def __init__(self):
        super(Derived, self).__init__()
于 2013-08-01T23:43:32.913 に答える