次のような 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 を使用しています。