Связующий генератор (например, SWIG), который обрабатывает обратные вызовы в стиле C? - PullRequest
2 голосов
/ 12 ноября 2010

Я недавно написал привязку для библиотеки C, используя SWIG.Хотя большая часть этого была проста и использовала только базовую функциональность SWIG, я столкнулся с проблемой, когда мне нужно было поддержать одну функцию, которая принимала обратный вызов C в качестве аргумента, который не поддерживается для SWIG.Я решил эту проблему, написав специфичный для Python код для обеспечения пользовательского обратного вызова, в котором я вызвал функцию 'eval' Python для оценки поставляемого Callable.

Хотя это работало хорошо, для меня это было неудачноя надеялся использовать SWIG, чтобы воспользоваться поддержкой десятков языков, но теперь я застрял в необходимости выяснения обратных вызовов на каждом языке, который я хочу поддерживать.Это делает мои размеры работы по связыванию менее полезными, так как теперь мне приходится много раз решать одну и ту же проблему вручную - противоположность цели использования SWIG.

Есть ли такой инструмент, как SWIG, который также обрабатывает обратные вызовы C?

1 Ответ

0 голосов
/ 16 сентября 2012

Это немного сложнее, но если вы перекомпилируете проект C в C ++ или создаете расширение C ++, то вы можете воспользоваться перегрузкой виртуальных функций.

Большинство языковых модулей SWIG поддерживают директоров , которые позволяют классу на целевом языке наследоваться от класса в библиотеке C ++.Таким образом, любая переопределенная виртуальная функция действует как обратный вызов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...