不能用swig包装模板静态函数

时间:2014-09-04 10:33:09

标签: templates static swig

我正在尝试包装一个简单的静态模板函数,如下所示:

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

使用swig指令:

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

但我一直在接受:

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

我在this mailing list上发现了同样的问题,但遗憾的是没有回复。这是一个swig限制吗?是否需要一些特殊操作?


以上几行准备粘贴在.i文件中:

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

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

要使用swig进行处理,请执行以下操作:

swig -c++ -tcl test.i

2 个答案:

答案 0 :(得分:0)

到目前为止,我解决了这个声明swig可以更好地管理的虚拟函数:

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

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

我认为它足够干净,但我仍在寻找更合适的解决方案。

答案 1 :(得分:-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>;
}