Как представить с пространствами имен Swig C ++ как модули Python - PullRequest
0 голосов
/ 24 августа 2018

Имея код C ++:

namespace ns {
    struct Person {};
}

Я бы хотел выставить Person класс для python в модуле ns:

import libapp
x = libapp.ns.Person()

Возможно ли использовать swig?

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

У меня есть оболочка, написанная на Boost.Python (она позволяет такое отображение ), и я переключаюсь на swig, поэтому я не хочу переписывать код клиента оболочки.

1 Ответ

0 голосов
/ 24 августа 2018

Самый простой ответ на это - написать по одному SWIG-модулю для каждого пространства имен, которое вы хотите предоставить, поэтому в приведенном выше примере вы бы написали SWIG-модуль с именем ns внутри пакета libapp.

Youможет ссылаться на другие пространства имен, все еще находящиеся в других модулях, используя директиву SWIG * 1004. *.

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

...