swig和C ++ 11的兼容性

时间:2014-03-17 17:24:51

标签: c++ c++11 swig

我正在尝试为复杂项目创建一个python模块,该模块使用C ++ 11中的一些新功能(https://code.google.com/p/cpp-array/)。我的界面文件非常简单:

%module array

%{
#include "array-config.hpp"
#include "array.hpp"
%}
%include "array-config.hpp"
%include "array.hpp"

然而,当我跑步时,我会遇到很多错误。

第一个错误是constexpr

constexpr static int dim()
{ return d; }

因此,如果我删除constexpr,我可以解决这个错误。根据{{​​3}}中的文档,此关键字已得到处理。

第二个是找到此功能时:

template <int d, typename U, typename... Args>
typename std::enable_if<std::is_integral<U>::value and !std::is_pointer<U>::value and d < k, void>::type
init(U i, Args&&... args) {

  assert(i != 0); // Array dimension cannot be zero
  n_[d] = i;
  init<d+1>(args...);
}

我只是试图使用swig“为真正的懒惰”,但我开始怀疑在这一点上是否甚至可能。我是否必须复制整个头文件并开始进行调整才能使其工作?我真的很感激一些建议,因为我是新手。

1 个答案:

答案 0 :(得分:0)

您始终可以在#ifdef

中包装SWIG不喜欢的任何内容

例如,我正在使用我们使用的SWIG版本不支持的C ++ 11块。所以我这样做:

namespace glue {
    class GlueServer {
    public:
        virtual void handle(std::string path, GlueHandlerFunc handler, void* arg) = 0;    
#ifndef SWIG
        virtual void handleBlock(std::string path, void (^b)(GlueRequest* req)) = 0;
#endif

// ...