2015-11-10 3 views
0

У меня возникли проблемы с использованием swig для обертывания библиотеки C++ для golang. Вот мой заголовочный файл C++.Swig wrapper for golang

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. Вот мой глоток API

%{ 
#include "builder.h" 
%} 

%ignoreall 

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

%include "builder.h" 

%unignoreall 

Но когда я компилирую я получаю сообщение об ошибке указывает на функцию CreateCounters, которая имеет аргумент unique_ptr вектора. Может ли кто-нибудь сказать мне, что здесь не так?

Заранее спасибо :)

+0

Просьба включить полное сообщение об ошибке в сообщение. –

+0

Я использую swig во внутренней системе. Хотя сообщение об ошибке: 'builder.h :: Ошибка: ошибка синтаксиса во вводе (3)' Строка 5 указывает на функцию CreateCounters. – linkin

+0

Является ли ваша «внутренняя система» передающей аргумент '-C++' swig, чтобы сказать, что она обертывает C++? – m7thon

ответ

0

Ваш файл 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.