我阅读了SWIG 3.0.4 under alias templates的C ++ 11文档,并说它们得到部分支持。该文档列出了一些警告,并建议使用模板的代码仍然主要工作。但是,当我尝试特定的代码时,SWIG声称输入有错误并停止继续。
这是我的测试设置,包含4个文件:Experiment.h,Experiment.cpp和Experiment.i。
在experiment.h中:
#ifndef EXPERIMENT_H
#define EXPERIMENT_H
template< typename T >
class MyTemplate {
T m_MyTemplateVariable;
};
struct Policy {
template< typename T >
using PolicyTemplate = MyTemplate<T>;
};
template< typename Policy, typename T >
class TestClass {
public:
typedef typename Policy::template PolicyTemplate< T > InternalTemplate;
TestClass() {}
private:
InternalTemplate m_TestMember;
};
#endif
在experiment.cpp中:
#include "Experiment.h"
int main( int argc, char *argv[] ) {
TestClass< Policy, int > inttest;
TestClass< Policy, float > floattest;
return 0;
}
在Experiment.i中,我有这个:
%module Experiment
%{
#include "Experiment.h"
%}
%include "Experiment.h"
%template( IntTestClass ) TestClass< Policy, int >;
%template( FloatTestClass ) TestClass< Policy, float >;
编译时,我使用c++ -o Experiment -std=c++11 Experiment.cpp
。代码编译。当我跑步时,我得到:
Experiment.h:11: Warning 342: The 'using' keyword in template aliasing is not fully supported yet.
Experiment.h:17: Error: Syntax error in input(3).
预期警告342,如文档中所述。这是意外的语法错误部分,恰好就在这一行:
typedef typename Policy::template PolicyTemplate< T > InternalTemplate;
是否有解决此问题的方法? SWIG不应该只是不将它添加到类型系统并继续前进,就像在文档中声称的那样?任何帮助将不胜感激。如果重要的话,我正试图瞄准ruby和python。如果我忽略了一些愚蠢的事情,我会提前道歉。