Динамическая загрузка класса C ++ через капсулы Python

Этот вопрос в основном академический.
Это вытекает из некоторых вопросов дизайна, с которыми я столкнулся, работая над оболочками для существующего проекта C ++.

При работе с расширениями C / C ++ для Python можно динамически загружать функции уровня C, которые были заключены в капсульные объекты Python, в другие модули расширения (см. документы).
Это означает, что если вы хотите работать с классом C ++, обернутым в другом модуле, у вас есть эти две опции (по крайней мере):

  • Связывайтесь с исходной библиотекой C ++ и включайте соответствующие заголовки и используйте только капсулы для загрузки функций, которых нет в исходной библиотеке (например, преобразования между типами Python и C ++).
  • Предоставьте C-подобный API, написав фабричные функции, которые имитируют конструкторы, а затем обернув методы внутри функций, которые принимают указатель на экземпляр класса в качестве дополнительного аргумента.

У меня вопрос такой: Есть ли способ разделить классы C ++ между модулями расширения Python, который позволяет использовать идиоматические классы (то есть, как они будут использоваться в C ++), а также динамически загружать их из другого модуля расширения Python?

Единственный возможный способ, которым я могу придумать, — это повторно объявить класс с необходимыми сигнатурами методов в анонимном пространстве имен (чтобы имена были частными для каждого модуля), а затем определить методы для переноса указателей на функции-члены, которые были загружены через капсулы. , Это вообще возможно?

1

Решение

Задача ещё не решена.

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


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