2012-04-26 34 views
5

He visto numerosos lugares en los que la comunicación entre Ada/C/C++ es posible usando palabras clave de exportación/importación. ¿Qué pasa si la función Ada es genérica? es esto posible?¿Se pueden exportar las funciones genéricas de Ada a C++?

Mi problema es que necesito reutilizar algún código heredado y tenemos numerosas funciones genéricas de Ada. La nueva capa que viene será escrita en C++ y espero poder exportar estas funciones genéricas de Ada existentes a un contenedor de C++. (En realidad, si las funciones no son globales necesitaré otra capa, pero no lo creo ahora).

Si no es posible, solo tendré que crear nuevas funciones individuales de Ada específicas para los diferentes tipos que a su vez el genérico ¿Alguna idea sobre este enfoque?

Definitivamente soy un novato con la programación de Ada, así que disculpe mi ignorancia. Gracias por la ayuda.

Respuesta

4

Escriba un pequeño paquete Ada cuya especificación contenga los subprogramas exported y cuyo cuerpo ejemplifique esos subprogramas usando los tipos disponibles en §B.3 Interfacing with C and C++. No olvide llamar al adainit() y adafinal() en el lado C. Más here.

+0

Estaba pensando que esto es lo que iba a tener que hacer. Solo esperaba que el lenguaje lo permitiera en lugar de tener que escribir n número de funciones para cada genérico. Gracias :) – JSolberg

+1

El problema no es [solo] Ada en este caso, pero C++ no hay forma de decir "hey, compilador, este es un paquete/unidad/módulo/plantilla", ¿verdad? Sería interesante ver si había una forma de exportar paquetes completos, pero eso involucraría a otros idiomas a) exigir esos paquetes, yb) tener realmente las instalaciones para los paquetes. – Shark8

-2

No estoy familiarizado con Ada, pero debería poder llamar a las funciones exportadas (suponiendo que el compilador de Ada no hace nada demasiado perverso). Debería intentar eliminar el archivo de objeto Ada (el resultado de la compilación) para inspeccionar los nombres de las funciones.

+2

El problema es con el genérico de Ada (equivalente a la plantilla de C++). – AProgrammer

+0

Eso no parece relevante en absoluto. Preguntó sobre la programación de lenguaje mixto. El hecho de que necesite invocar una construcción orientada a objetos desde el código c es irrelevante. Para invocar la función exportada, solo debe tener acceso a la firma de la función – user590028

+2

. Es muy relevante; no puede llamar a una función de plantilla C++ desde C++ o C, solo puede llamar a una función de plantilla instanciada. De la misma manera, no puede llamar a un subprograma genérico; primero tiene que crear una instancia y luego llamar a la creación de instancias. –

Cuestiones relacionadas