SWIG 3.0.x在使用模板别名声明和typedef的代码中没有进展。它仍然不受支持吗?

时间:2015-01-18 16:45:27

标签: c++ ruby templates c++11 swig

我阅读了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。如果我忽略了一些愚蠢的事情,我会提前道歉。

0 个答案:

没有答案