2011-06-02 15 views
5

Tengo una clase de C++ como el siguiente:envolver plantilla plantilla de clase de parámetros con el TRAGO

template< template<typename> class ContainerType, typename MemberType> 
class MyClass 
{ 
    public: 
    MyClass(ContainerType<MemberType>* volData); 
} 

la que estoy tratando de envolver con TRAGO. Mi MyClass.i se ve así:

%module MyClass 
%{ 
    #include "SimpleContainer.h" 
    #include "MyClass.h" 
%} 

%include "SimpleContainer.h" 
%include "MyClass.h" 

%template(MyClass_SimpleContainer_Int) MyClass<SimpleContainer, int>; 

Sin embargo, SWIG parece tener problemas con el parámetro de plantilla de la plantilla. Al compilar se queja con el mensaje de error:

MyClassPYTHON_wrap.cxx:30545:3: error: ‘ContainerType’ was not declared in this scope 

En cuanto a esa línea en el código generado, que contiene la línea:

ContainerType<int> *arg1 = (ContainerType<int> *) 0 ; 

Por alguna razón, se trata de utilizar pie de la letra el nombre de la plantilla ficticia como el nombre de la clase, aunque ya le dije que esta ejemplificación de la clase debería tener un ContainterType of SimpleContainer.

¿Hay alguna forma de evitar este error? Encontré mención de ello en el SWIG tracker pero no pude entender la solución mencionada en la última publicación y también ese error tiene 4 años.

estoy usando TRAGO 1.3.40 y GCC 4.5.1 en openSUSE 11.4

+0

Me actualicé a SWIG 2.0.3 y el error todavía está presente. – Milliams

Respuesta

-1

La primera línea de la cabecera de C++ parece extraño para mí. Intente lo siguiente:

template<class ContainerType, typename MemberType> 
Cuestiones relacionadas