Почему SWIG генерирует SwigvalueWrappers для std :: vector , но не для std :: vector ?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему SWIG генерирует SwigvalueWrappers для std :: vector , но не для std :: vector ?

Сообщение Anonymous »

В настоящее время я просто пытаюсь понять, как работает 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 больше не должен его обернуть?

Подробнее здесь: https://stackoverflow.com/questions/795 ... -not-for-s
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»