termos meaning how cup c++ c interface swig language-binding

c++ - meaning - extendiendo tipos ''incompletos''(SWIG)



swig python (1)

Puede agregar fácilmente métodos adicionales a un tipo que se haya declarado en avance en SWIG dándole una definición vacía en la interfaz, por ejemplo

test.h:

// Forward declare foo struct foo;

test.i:

%module test // Tell SWIG to wrap foo "properly", but that you don''t know anything about it: struct foo { }; %include "test.h" %extend foo { void bar() { // Do stuff, probably with $self, here } }

La clave es que en el archivo de interfaz no estás escribiendo C o C ++ en el sentido normal, le estás diciendo a SWIG qué tipos y qué partes de cada tipo envolver.

Dado que presumiblemente dependerá de la biblioteca para crear y destruir instancias, también querrá agregar:

%nodefaultctor foo; %nodefaultdtor foo;

En el archivo de interfaz para suprimir la generación del constructor / destructor y obligarlo a pasar por la biblioteca.

Estoy buscando una forma de ampliar (es decir, agregar nuevos miembros a un tipo usando la directiva% extender) un tipo que se define en el archivo de la biblioteca, mientras que los archivos de encabezado de la biblioteca proporcionan solo una declaración directa para el tipo.

Tratar el tipo como si su definición se conoce en tiempo de compilación lleva a la siguiente advertencia:

Warning 303: %extend defined for an undeclared class [name of the type].

¿Alguien conoce una solución o una solución para este problema? Estoy seguro de que hay uno, ya que la documentación de SWIG establece que Swig supone que el tipo desconocido es una estructura o una unión cada vez que encuentra uno.

¡Muchas gracias de antemano!