Единственный действительно независимый от компилятора ответ, который я могу вам дать, заключается в том, что это так же возможно, как вызов C ++ из C в вашей системе.
Как и в случае с C, вы должны выяснить искаженный символ вашей подпрограммы C ++ и написать привязку на стороне C (в данном случае Ada), которая ссылается на это искаженное имя. Вам также, вероятно, придется делать некоторые вещи на стороне C ++, например, объявлять функцию C ++ extern.
Если вы можете объявить вашу функцию C ++ вне "C", это легко. Просто сделайте это на стороне C ++ и используйте стандартные функции импорта Ada C на стороне Ada.
Пример:
в вашем cpp:
extern "C" int cpp_func (int p1, int p2) {
; // Whatever..
}
в вашем .adb:
function cpp_func (p1, p2 : Interfaces.C.Int) return Interfaces.C.Int;
pragma Import (C, cpp_func);
...
Result : constant Interfaces.C.Int := cpp_func (1, 2);