2011-06-02 45 views
5

我有一個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。

有什麼辦法可以解決這個bug?我在SWIG tracker中發現了它,但是我無法理解上一篇文章中提到的解決方法,並且該bug是4年前的版本。

我使用痛飲1.3.40和4.5.1 GCC在openSUSE 11.4

+0

我已升級到SWIG 2.0.3並且該錯誤仍存在。 – Milliams 2011-06-05 15:59:31

回答

-1

你的C++頭的第一行看起來很奇怪我。請嘗試以下操作:

template<class ContainerType, typename MemberType>