我正在尝试为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的原因)。
谢谢。