我正在尝试为一个使用C++11的新功能(https://code.google.com/p/cpp-array/)的复杂项目创建一个Python模块。我的接口文件非常简单:
%module array
%{
#include "array-config.hpp"
#include "array.hpp"
%}
%include "array-config.hpp"
%include "array.hpp"
当我运行swig时,出现了很多错误。
第一个错误是关于constexpr的。
constexpr static int dim()
{ return d; }
如果我移除constexpr,我就可以避免这个错误。根据http://www.swig.org/Doc3.0/CPlusPlus11.html中的文档,这个关键字已经被处理。
第二个问题是当找到这个函数时:
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,但现在我开始怀疑这是否可能。我必须复制整个头文件并开始进行微调才能使其起作用吗?由于我是swig的新手,因此我真的希望得到一些建议。
constexpr
、SFINAE 等的简化接口,并将其提供给 SWIG。 - DanielKO