我有一个类结构,它使用了很多我想要的模板。 我知道堆栈溢出有几个类似的问题(Wrapping template template parameter class with SWIG,wrapping 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