使用SWIG包装模板模板参数类

时间:2011-06-02 13:27:22

标签: c++ templates swig template-templates

我有一个类似以下的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 ;

由于某种原因,它使用逐字表示虚拟模板名称作为类的名称,尽管我已经告诉它该类的实例化应该具有SimpleContainer的ContainterType。

有什么方法可以解决这个错误吗?我在SWIG tracker中发现了它的提及,但我无法理解上一篇文章中提到的解决方法,而且该错误还有4年。

我在openSUSE 11.4上使用SWIG 1.3.40和GCC 4.5.1

1 个答案:

答案 0 :(得分:-1)

C ++标题的第一行对我来说很奇怪。请尝试以下方法:

template<class ContainerType, typename MemberType>