我正在尝试包装一个简单的静态模板函数,如下所示:
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
答案 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>;
}