6

次のような C++ クラスがあります。

template< template<typename> class ContainerType, typename MemberType>
class MyClass
{
  public:
    MyClass(ContainerType<MemberType>* volData);
}

SWIGでラップしようとしています。私の MyClass.i は次のようになります。

%module MyClass
%{
  #include "SimpleContainer.h"
  #include "MyClass.h"
%}

%include "SimpleContainer.h"
%include "MyClass.h"

%template(MyClass_SimpleContainer_Int) MyClass<SimpleContainer, int>;

ただし、SWIG はテンプレートのテンプレート パラメータに問題があるようです。コンパイルすると、次のエラー メッセージが表示されます。

MyClassPYTHON_wrap.cxx:30545:3: error: ‘ContainerType’ was not declared in this scope

生成されたコードのその行を見ると、次の行が含まれています。

ContainerType< int > *arg1 = (ContainerType< int > *) 0 ;

このクラスのインスタンス化には SimpleContainer の ContainterType が必要であると伝えたにもかかわらず、何らかの理由でダミーのテンプレート名をそのままクラスの名前として使用しています。

このバグを回避する方法はありますか? SWIGトラッカーでそれについての言及を見つけましたが、最後の投稿で言及された回避策を理解できませんでした。また、バグは4歳です。

openSUSE 11.4 で SWIG 1.3.40 と GCC 4.5.1 を使用しています。

4

1 に答える 1

-1

C++ ヘッダーの最初の行が奇妙に見えます。次のことを試してください。

template<class ContainerType, typename MemberType>
于 2012-04-02T16:16:58.677 に答える