аннотации — Есть ли хороший способ генерировать код на C ++ для отправки параметров функции по сети?

Мне нужно что-то (например, аннотации, отражения, определения или что-то совершенно другое), которое я могу добавить к произвольному вызову функции или функции.

Для каждой функции f, который имеет это что-то, добавленная конкретная функция t должны вызываться с параметрами f,

Функция t Теперь должен отправить свои параметры по сети другой программе.

Есть ли способ сделать что-то подобное?

1

Решение

Общий принцип за этим называется marshallingгде параметры функции упакованы таким образом, что вы можете отправить их на другой компьютер. Отправитель маршаллизирует параметры, получатель демаршаллирует. Оба должны иметь представление о типах и должны делать это в соответствии с различными компьютерными архитектурами.

Удаленные вызовы процедур (RPC) являются одним из способов отправки вызовов функций с одного компьютера на другой и требуют некоторой сортировки за ними.

XMLRPC, как отметил Виктор, является одним из способов сделать это, когда сортировка происходит через XML. Существует множество других пакетов, и поиск в Google для RPC и маршаллинга должен дать больше возможностей, но XMLRPC может быть именно тем, что вам нужно.

CORBA и DCOM являются родственным механизмом. Идея отправки вызовов функций между компьютерами является одной из основных концепций в распределенных системах, так что, возможно, посмотрите немного подробнее, возможно, есть очень простые решения вашей конкретной проблемы.

3

Другие решения

XMLRPC библиотека может быть той, которую вы ищете, если вы просто хотите вызвать функцию на удаленном компьютере. Он генерирует код для маршалинга параметров с использованием спецификаций XML RPC.

1

Вы можете использовать Google Protocol Buffers для этого: https://developers.google.com/protocol-buffers/docs/overview

Это простая в использовании и переносимая библиотека сериализации. Кроме того, вы сможете писать программы, способные «общаться» с вашим кодом C ++ (десериализовать объекты, сериализованные вашим кодом C ++) на разных языках, таких как Python, Java и другие, что может быть очень полезно, например, для упрощения тестирования. ,

1

Если вы находитесь в среде Linux / BSD, выполните ‘man rpcgen’. Мне было проще создавать распределенные приложения, чем DCE / CORBA.

Давайте дадим то, что вы пытаетесь сделать имя, «вызов функции внутри процесса» или IFC.

Я работал над компилятором IFC (ifcc) для создания масштабируемых облачных приложений со встроенной в приложения видимостью на основе браузера в реальном времени.

Прототип компилятора работает. Часть видимости платформы также работает, но еще не интегрирована в компилятор для генерации инструментального кода.

Ifcc принимает в качестве входных данных файл включения C и, основываясь на объявлениях прототипов функций в файле .h, генерирует исходный код C для маршаллинга и клиентские и серверные прокси / заглушки, подходящие для гетерогенного использования (заботится о порядке следования байтов). / big endian / little endian) окружающая среда.

И, кстати, ifcc — умный компилятор. Он не только обрабатывает массивы, определения типов, вложенные структуры и т. Д., Но также выполняет произвольную погоню за указателями. Например. если вы вызываете функцию с указателем на список двойных ссылок, она упаковывает его, отправляет и воссоздает список двойных ссылок на принимающей стороне.

Если люди хотят поиграть с ним, добавьте комментарий с выводом «uname -a» вашей системы, а также с тем, какой компилятор вы используете. Если есть большой интерес, я могу сделать его доступным для разработчиков, чтобы учиться / играть / экспериментировать.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector