c++ - golang 的 Swig 包装器

标签 c++ go swig unique-ptr

我在使用 swig 为 golang 包装 c++ 库时遇到了问题。这是我的 C++ 头文件。

class Builder {
 public:
  explicit Builder(int i):counters(i){} 
  void Init(); 
  void CreateCounters(vector<std::unique_ptr<int>>* s);
  bool CreateEntry(string* primary_key);
 private:
  std::shared_ptr<hash_set<string>> ids;
  int counters;
};

我只想包装 Builder 类及其构造函数 Init() 和 CreateEntry 函数。这是我的 swig API

%{
#include "builder.h"
%}

%ignoreall

%unignore Builder;
%unignore Builder::Init();
%unignore CreateEntry(string* primary_key);

%include "builder.h"

%unignoreall

但是当我编译时,我得到指向 CreateCounters 函数的错误,该函数的参数为​​ unique_ptr vector 。谁能告诉我这里出了什么问题?

提前致谢:)

最佳答案

您的 swig 文件没有模块名称。试试这个...

%module builder
%{
#include "builder.h"
%}

%ignoreall

%unignore Builder;
%unignore Builder::Init();
%unignore CreateEntry(string* primary_key);

%include "builder.h"

%unignoreall

模块名称转换为包装代码所在的包的名称。

同样对于 C++ 代码,请确保您的 swig 文件被命名为类似“builder.swigcxx”的扩展名,否则它会假设您正在包装纯 C。

关于c++ - golang 的 Swig 包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33621292/

相关文章:

c++ - 如何访问 C++ 中链表中的对象

json - 无法解码golang回应

python - 从 C 访问 PyBuffer 的内容

php - 强制类型 SWIG

c++ - 将数组分配给数组

c++ - 我怎样才能在C++中计算一个double的阶乘

c++ - 进行矩阵乘法时 C++ 中的段错误

database - Golang gocql无法连接到Cassandra(使用Docker)

go - 以下代码片段中的 ~once~ 变量是什么意思?

java - 如何通过Swig将带有数据的std::vector <UserDefinedClass>传递给Java?