Обтекание шаблона шаблона класса параметров с помощью SWIG - PullRequest
6 голосов
/ 02 июня 2011

У меня есть класс 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 ;

По какой-то причине в качестве имени класса используется дословное имя фиктивного шаблона, хотя я и сказал, что для этого экземпляра класса должен быть ContainerType типа SimpleContainer.

Есть ли способ, которым я могу обойти эту ошибку? Я нашел упоминание об этом в SWIG-трекере , но я не мог понять обходной путь, упомянутый в предыдущем посте, а также, что этой ошибке 4 года.

Я использую SWIG 1.3.40 и GCC 4.5.1 на openSUSE 11.4

1 Ответ

0 голосов
/ 02 апреля 2012

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

template<class ContainerType, typename MemberType>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...