У меня есть класс С++, например:
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 ;
По какой-то причине он использует дословно фиктивное имя шаблона в качестве имени класса, хотя я сказал ему, что этот экземпляр класса должен иметь ContainterType из SimpleContainer.
Можно ли как-нибудь обойти эту ошибку? Я нашел упоминание об этом в SWIG-трекере, но не смог поймите обходной путь, упомянутый в последнем посте, а также эту ошибку уже 4 года.
Я использую SWIG 1.3.40 и GCC 4.5.1 на openSUSE 11.4.