В настоящее время я просто пытаюсь понять, как работает SWIG, и я столкнулся с чем -то: используя SWIG 4.3, C ++ 14 и генерирование обертки для Python: < /p>
Это мой файл интерфейса: < /p>
//project.i
%module project
%{
#include "object.h"
%}
%include "object.h"
//%include "std_vector.i"
//%template(vec_int) std::vector;
< /code>
И это файл, который содержит код. Я не могу поделиться исходным кодом, потому что он конфиденциально, поэтому я все убрал (надеюсь, не обязательно) и переименовал другие объекты. < /P>
//object.h
#include "MyClass.h"
#include
typedef int ID;
struct Object {
using MyClass = Settings::MyClass;
std::vector calculateMyClass() const;
std::vector getIDs() const;
}
< /code>
И вот код класса, из которого изготовлен вектор. < /p>
//MyClass.h
namespace Settings {
double member1;
double member2;
double member3;
unsigned int member4;
bool member5;
}
< /code>
В моем файле обертки .cxx, аргументы и returnvalues метода Calculatemyclass () формы обернуты SwigvalueWrapper: < /p>
[...]
SwigValueWrapper< std::vector< myClass > > result;
< /code>
Однако обертка для метода GetIDS имеет следующий результат: < /p>
std::vector< ID > result;
< /code>
он не был обернут. < /p>
Это становится еще более странно: когда я включаю < /p>
%include "std_vector.i"
< /code>
В файле интерфейса (так что теперь Swig знает, что такое вектор и как его обработать), тогда код обертки изменяется на < /p>
SwigValueWrapper< std::vector< int,std::allocator< int > > > result;
< /code>
И когда я создаю экземпляр шаблона через < /p>
%template(vec_int) std::vector;
< /code>
В файле интерфейса, затем SwigvalueWrapper снова удаляется и заменяется на: < /p>
std::vector< ID,std::allocator< ID > > result;
< /code>
Документация SWIG записывается (6.11): < /p>
Если вектор определяется как класс в интерфейсе, но не поддерживает конструктор по умолчанию и оператор присвоения, изменяет код обертки, инкапируя аргументы
in special csplate crapper, «Озадачаемость», «Br />» в Special Cpratper Crapper, «Озадачаемость». Transform ". - Я думаю, это означает, что Swig теперь знает, как разрешить и обернуть события вектора, если он встретит их в файле интерфейса. Сделает ли это теперь STD :: вектор определенным классом в интерфейсе, который не имеет конструктора?%template(vec_int) std::vector;
Добавить так, чтобы Mutch в класс std :: vector, который Swig больше не должен его обернуть?
В настоящее время я просто пытаюсь понять, как работает SWIG, и я столкнулся с чем -то: используя SWIG 4.3, C ++ 14 и генерирование обертки для Python: < /p> Это мой файл интерфейса: < /p> [code]//project.i
//%template(vec_int) std::vector; < /code> И это файл, который содержит код. Я не могу поделиться исходным кодом, потому что он конфиденциально, поэтому я все убрал (надеюсь, не обязательно) и переименовал другие объекты. < /P> //object.h #include "MyClass.h" #include typedef int ID; struct Object { using MyClass = Settings::MyClass;
} < /code> В моем файле обертки .cxx, аргументы и returnvalues метода Calculatemyclass () формы обернуты SwigvalueWrapper: < /p> [...] SwigValueWrapper< std::vector< myClass > > result; < /code> Однако обертка для метода GetIDS имеет следующий результат: < /p> std::vector< ID > result; < /code> он не был обернут. < /p> Это становится еще более странно: когда я включаю < /p> %include "std_vector.i" < /code> В файле интерфейса (так что теперь Swig знает, что такое вектор и как его обработать), тогда код обертки изменяется на < /p> SwigValueWrapper< std::vector< int,std::allocator< int > > > result; < /code> И когда я создаю экземпляр шаблона через < /p> %template(vec_int) std::vector; < /code> В файле интерфейса, затем SwigvalueWrapper снова удаляется и заменяется на: < /p> std::vector< ID,std::allocator< ID > > result; < /code> Документация SWIG записывается (6.11): < /p>
Если вектор определяется как класс в интерфейсе, но не поддерживает конструктор по умолчанию и оператор присвоения, изменяет код обертки, инкапируя аргументы in special csplate crapper, «Озадачаемость», «Br />» в Special Cpratper Crapper, «Озадачаемость». Transform ". - Я думаю, это означает, что Swig теперь знает, как разрешить и обернуть события вектора, если он встретит их в файле интерфейса. Сделает ли это теперь STD :: вектор определенным классом в интерфейсе, который не имеет конструктора?%template(vec_int) std::vector; [/code] Добавить так, чтобы Mutch в класс std :: vector, который Swig больше не должен его обернуть?