我阅读了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。如果我忽略了一些愚蠢的事情,我会提前道歉。
您应该使用Swig 3.0.12版。没关系。您的版本太旧了