SWIG包装器和已删除的默认构造函数

时间:2019-07-26 21:20:26

标签: c++ go swig

我正在尝试为E57Format(用于E57文件的C ++库)构建Go SWIG包装器(请参见https://github.com/asmaloney/libE57Format)。 Go无法编译包装程序,因为它需要某些删除了默认构造函数的类的默认构造函数。

在E57Format.h中,选择e57 :: Node :: parent()函数(第179行):

    public static decimal ToDecimal(this double @double) => 
        @double > (double) decimal.MaxValue ? decimal.MaxValue : (decimal) @double;

生成的C包装器是:

class Node
{
public:
    Node() = delete;

    NodeType    type() const;
    bool        isRoot() const;
    Node        parent() const;

注意该行     e57 :: Node结果;

此行不可编译,因为已删除e57 :: Node默认构造函数。

我尝试了很多事情: *忽略失败的功能,购买我确实需要其中一些功能 *%nodefaultctor指令,但它不能避免使用默认构造函数,它可以防止生成默认构造函数的包装器。

这是我当前的swigcxx文件

e57::Node *_wrap_Node_parent_libe57format_c463bf06275b76de(e57::Node *_swig_go_0) {
  e57::Node *arg1 = (e57::Node *) 0 ;
  e57::Node result;
  e57::Node *_swig_go_result;

  arg1 = *(e57::Node **)&_swig_go_0; 

  result = ((e57::Node const *)arg1)->parent();
  *(e57::Node **)&_swig_go_result = new e57::Node(result); 
  return _swig_go_result;
}

我想生成C ++可以编译的包装程序,可能不需要自己编写C代码(不编写C代码是我使用Go的原因)。

谢谢。

0 个答案:

没有答案