2014-09-04 75 views
0

我想換一個簡單的靜態模板函數這樣的一個模板靜態函數:不能完成與痛飲

namespace ns { 
    class A { 
    public: 
    template<typename T> 
    static void func() {} 
    }; 
} 

與痛飲指令:

%template(func_type) ns::A::func<type>; 

但我不斷收到:

Error: Undefined scope 'ns::A' 
Error: Template 'ns::A::func' undefined. 

我在this mailing list上發現了同樣的問題,但很遺憾沒有回覆。這是一個限制嗎?它需要一些特殊的操作嗎?


下面是幾行上述準備在.i文件粘貼:

%module example 
%{ 
namespace ns { 
    class A { 
    public: 
    template<typename T> 
    static void func() {} 
    }; 
} 
%} 

%template(func_int) ns::A::func<int>; 

要使用痛飲處理此只是做:

swig -c++ -tcl test.i 

回答

0

現在我解決了這個聲明一些虛擬功能,swig可以更好地管理:

namespace ns { 
    class A { 
    public: 
    template<typename T> 
    static void func() {} 

    static void funcT1() {func<T1>();} 
    static void funcT2() {func<T2>();} 
    }; 
} 

我認爲它夠乾淨,但我仍在尋找更合適的解決方案。

-1

你必須給它一個特定類型:

%template(func_int) ns::A::func<int>; 
%template(func_float) ns::A::func<float>; 

你也可以(不能測試這裏)有命名空間包裹%template

namespace ns { 
    %template(func_int) A::func<int>; 
    %template(func_float) A::func<float>; 
} 
+0

是的,這正是我做了,但我遇到了所述的錯誤。你試過這個嗎?你成功了嗎? – DarioP 2014-09-05 08:55:04

+0

也許你必須用命名空間包裝(更新我的答案)。如果這沒有幫助,那麼你的.i中肯定還有其他的錯誤。也許擴展您的文章,以包括一個完整的,但* *最小* .i再現問題。 – Schollii 2014-09-05 13:27:13

+0

完整的和最小的.i在問題中已經差不多了,但是我添加了它。我也嘗試了你的第二個建議,但沒有任何區別。 – DarioP 2014-09-05 15:42:01