使用swig包装c ++模板模板模板类

时间:2016-03-03 21:19:28

标签: python c++ templates swig

我有一个类结构,它使用了很多我想要的模板。 我知道堆栈溢出有几个类似的问题(Wrapping template template parameter class with SWIGwrapping specialised c++ template class with swig。)但是没有一个适用于我的情况。

最小示例如下所示

insane_template.h

#pragma once

class CustomAttrs{
public:
    enum dattr1d{pos,vel,someCustomCaseVar, d1dLast};
};


template <class T> 
class A
{
public:
    T attributes;
};


template <template<class> class A, class T> 
class B : public A<T>
{

};


template<template<template<class> class, class> class Op, template<class> class X, class T>
class C : public Op<X,T>
{
};

template class A<CustomAttrs>;
template class B<A, CustomAttrs>;
template class C<B, A, CustomAttrs>;

我的 insane_template.i 非常简单:

%module insane

%{
#include "./insane_template.h"
%}

%include "./insane_template.h"

%template(AC) A<CustomAttrs>;
%template(BAC) B<A, CustomAttrs>;
%template(CBAC) C<B, A, CustomAttrs>;

当我尝试通过swig -v -c++ -python -outdir ./ nsane_template.i进行测试时,我收到错误Error: Syntax error in input(1).

如果我注释掉课程C,它会按预期工作。不幸的是,它是需要包装的最必要的类之一。

所以我的问题:是否(以及如何)可以像[{1}}

那样转换模板结构

我是否正确解析器无法解析此类模板构造?

对我来说只会轻拍template<template<template<class> class, class> class Op, template<class> class X, class T>

非常感谢

更新 我在ubuntu 14.04上使用swig 3.0.5和gcc / g ++ 4.8.4

0 个答案:

没有答案