SWIG C ++模板类接口

时间:2016-07-30 13:22:03

标签: python c++ swig

我想为我的C ++类创建一个python接口。 这个类依赖于一些模板参数,这些参数已经被关键字"使用"部分声明,这只是SWIG的部分支持。 这就是为什么我想在SWIG接口文件中更直接地声明它们。不幸的是,只有未评论的部分可以编译,例如functor_gaussianF作为参数,它抱怨它没有被声明。

这就是我在C ++标题中定义函子的方法:

template<class T> using functor_gaussian = DistFunction<T, som_learn<T>, fcn_gaussian_nhood<T>, fcn_rad_decay<T>, fcn_lrate_decay<T> >;
template<class T> using functor_bubble = DistFunction<T, som_learn<T>, fcn_bubble_nhood<T>, fcn_rad_decay<T>, fcn_lrate_decay<T> >;
template<class T> using functor_cutgaussian = DistFunction<T, som_learn<T>, fcn_cutgaussian_nhood<T>, fcn_rad_decay<T>, fcn_lrate_decay<T> >;
template<class T> using functor_epanechicov = DistFunction<T, som_learn<T>, fcn_epanechicov_nhood<T>, fcn_rad_decay<T>, fcn_lrate_decay<T> >;
template<class T> using functor_mexican = DistFunction<T, som_learn<T>, fcn_mexican_nhood<T>, fcn_rad_decay<T>, fcn_lrate_decay<T> >;

这里,在接口文件中我不能使用它们,但需要以某种方式再次定义它们:

%{
#include "SOMNet.h"
%}

%include "SOMNet.h" 

namespace ANN {
  %template(functor_gaussianF) DistFunction<float, som_learn<float>, fcn_gaussian_nhood<float>, fcn_rad_decay<float>, fcn_lrate_decay<float> >;
  %template(functor_bubbleF) DistFunction<float, som_learn<float>, fcn_bubble_nhood<float>, fcn_rad_decay<float>, fcn_lrate_decay<float> >;
  %template(functor_cutgaussianF) DistFunction<float, som_learn<float>, fcn_cutgaussian_nhood<float>, fcn_rad_decay<float>, fcn_lrate_decay<float> >;
  %template(functor_epanechicovF) DistFunction<float, som_learn<float>, fcn_epanechicov_nhood<float>, fcn_rad_decay<float>, fcn_lrate_decay<float> >;
  %template(functor_mexicanF) DistFunction<float, som_learn<float>, fcn_mexican_nhood<float>, fcn_rad_decay<float>, fcn_lrate_decay<float> >;

  %template(SOMNetGaussF) SOMNet<float, DistFunction<float, som_learn<float>, fcn_gaussian_nhood<float>, fcn_rad_decay<float>, fcn_lrate_decay<float> >>;
  /*
  %template(SOMNetBubbleF) SOMNet<float, functor_bubble>;
  %template(SOMNetCGaussF) SOMNet<float, functor_cutgaussian>;
  %template(SOMNetEpanF) SOMNet<float, functor_epanechicov>;
  %template(SOMNetMexicanF) SOMNet<float, functor_mexican>;
  */
}

0 个答案:

没有答案