2012-04-24 18 views
9

Por favor explique cuáles son estas advertencias por SWIG y cómo evitarlas?¿Qué es la advertencia 503 de SWIG?

Warning 503: Can't wrap 'operator()' unless renamed to a valid identifier. 
Warning 503: Can't wrap 'operator =' unless renamed to a valid identifier. 
Warning 503: Can't wrap 'operator *' unless renamed to a valid identifier. 

Las advertencias se generan cuando SWIG genera código C++ se compila en Android NDK.

+8

Eso no es una advertencia de G ++, es una advertencia de SWIG. – Flexo

+1

Iba a decir que se parece más a SWIG. No es un problema a menos que desee usar esos operadores de Java. –

+0

Gracias por la información, he editado mi pregunta. – arsalank2

Respuesta

13

Java no tiene un equivalente de operator() o operator= en el mismo sentido que C++, por lo que no hay forma de que SWIG lo ajuste directamente. Debido a que pueden ser importantes, se muestra una advertencia que explica que no están siendo envueltos. (Perder operator= puede ser particularmente malo a veces).

Este código exhibe tal advertencia cuando se ejecuta swig -Wall -c++ -java:

%module Sample 

struct test { 
    bool operator()(); 
}; 

Pero se puede silenciar la advertencia y decirle TRAGO a exponer al operador directamente como una función miembro regular diciendo algo como:

%module Sample 

%rename(something_else) operator(); 

struct test { 
    bool operator()(); 
}; 

Lo que hace que se agregue una función llamada something_else en lugar de operator() en el contenedor generado.

O bien, puede afirmarse que el TRAGO que ignorar los está bien usando:

%ignore operator() 

(También se puede aplicar cualquiera de dichas Directivas menos en términos generales, al calificar los operadores con los nombres de las clases).

3

Debe manejar los operadores sobrecargados de manera especial en SWIG, si desea usarlos en el idioma de destino. Ver here.

Cuestiones relacionadas