2014-09-04 76 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