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