Обертывание класса параметров шаблона шаблона с помощью SWIG

У меня есть класс С++, например:

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.


person Milliams    schedule 02.06.2011    source источник
comment
Я обновился до SWIG 2.0.3, и ошибка все еще присутствует.   -  person Milliams    schedule 05.06.2011


Ответы (1)


Первая строка вашего заголовка C++ кажется мне странной. Попробуйте следующее:

template<class ContainerType, typename MemberType>
person user1202136    schedule 02.04.2012