Кросс-платформенная библиотека для связи между C ++ и платформенным кодом (iOS, Android)

Я знаю, что это уже много раз спрашивали, но я не мог найти ничего близкого к тому, чего хочу среди существующих ответов SO.

В принципе, мы собираемся создать сложное мобильное приложение, которое будет иметь следующие функции:

  • 3D-рендеринг с OpenGL
  • Интеграция с камерой, акселерометром, гироскопом и другими функциями оборудования
  • Работа с сетью (HTTP)
  • Локальная база данных (SQLite)
  • Использование жесткого диска
  • Zip-файлы и шифрование (OpenSSL)
  • Интеграция с сторонним оборудованием (например, сторонним датчиком, подключенным к планшету) со своими SDK

Мы хотим, чтобы это приложение работало в среде iOS, Android и Windows. Рассматриваются многие решения, в том числе Qt, Xamarin и другие, но представляется весьма рискованным использовать эти фреймворки в такой сложной утилите.

Теперь мы имеем в виду создание каждого приложения изначально, но сохранение как можно большего общего кода в общих библиотеках C ++.

Например, мы хотели бы создать компоненты C ++ для различных функций, например:

  • Связь HTTP с сервером
  • Шифрование файлов
  • Бизнес-логика

Однако есть определенная проблема. Неясно, как мы подключаем собственный слой пользовательского интерфейса и код C ++ в библиотеках. Легко вызвать библиотечные функции из Java или Obj-C-кода, но многие из них будут вызывать некоторые асинхронные задачи (вызывать HTTP-url, dump-файл на диск). Неясно, как передавать результаты таких асинхронных задач обратно в код пользовательского интерфейса.

То, что мы в идеале хотим иметь, это некоторая архитектура MvvM, где представления полностью зависят от платформы, но модели и частично ViewModels написаны на C ++. Кроме того, такие архитектуры часто используют «Службы» – у них также может быть интерфейс, специфичный для платформы, но ядро ​​C ++.

Есть ли известный способ обеспечить такую ​​интеграцию? Может быть, есть библиотека, которая обеспечивает «средний уровень» между UI-кодом и библиотеками?

Или, может быть, наш подход вообще не жизнеспособен, что бы вы предложили в этом случае?