Templates 无法使用swig包装模板静态函数

Templates 无法使用swig包装模板静态函数,templates,static,swig,Templates,Static,Swig,我试图包装一个简单的静态模板函数,如下所示: namespace ns { class A { public: template<typename T> static void func() {} }; } 我发现有人问过同样的问题,但遗憾的是没有答复。这是swig限制吗?需要特殊操作吗 下面是上面准备粘贴到.i文件中的几行: %module example %{ namespace ns { class A { public: te

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

namespace ns {
  class A {
   public:
    template<typename T>
    static void func() {}
  };
}
我发现有人问过同样的问题,但遗憾的是没有答复。这是swig限制吗?需要特殊操作吗

下面是上面准备粘贴到.i文件中的几行:

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

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

现在我解决了这个问题,声明了一些swig可以更好地管理的虚拟函数:

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

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

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

现在我解决了这个问题,声明了一些swig可以更好地管理的虚拟函数:

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

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

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

您必须为它指定一种特定类型:

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

您必须为其指定特定类型:

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

是的,这正是我所做的,但我遇到了描述的错误。你试过这个吗?你成功了吗?也许你必须用我的答案结束。如果那没用,那你的i一定是出了什么问题。也许可以扩展你的帖子,让它包含一个完整但最小的。我重复了这个问题。完整且最小。我已经差不多回答了这个问题,但我添加了它。我也尝试了你的第二个建议,但没有任何区别。我把它放在那里,因为我有它在真正的代码中,但它真的没有区别。如果没有模板,错误是错误:未定义范围“A”错误:模板“A::func”未定义。是的,这正是我所做的,但我遇到了描述的错误。你试过这个吗?你成功了吗?也许你必须用我的答案结束。如果那没用,那你的i一定是出了什么问题。也许可以扩展你的帖子,让它包含一个完整但最小的。我重复了这个问题。完整且最小。我已经差不多回答了这个问题,但我添加了它。我也尝试了你的第二个建议,但没有任何区别。我把它放在那里,因为我有它在真正的代码中,但它真的没有区别。没有模板时,错误为错误:未定义范围“A”错误:模板“A::func”未定义。
%template(func_int) ns::A::func<int>;
%template(func_float) ns::A::func<float>;
namespace ns {
    %template(func_int)   A::func<int>;
    %template(func_float) A::func<float>;
}