我在使用 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/