SWIG передать поток из Python в C ++ - PullRequest
4 голосов
/ 04 февраля 2011

C ++
У меня есть некоторый класс логгера в C ++.Этот регистратор интенсивно используется в моей библиотеке.Регистратор позволяет установить стандартный поток STL для использования в качестве выходного потока.

Python
Библиотека Python, которая использует «библиотеку C ++ над оболочкой SWIG», в значительной степени использует стандартное ведение журналов Python с StreamHandler.Что-то вроде:

logger = logging.getLogger("base_logger")

#create and set console handler
ch = logging.StreamHandler()
ch.stream = sys.stdout
logger.addHandler(ch)

Как передать поток Python в библиотеку C ++ как поток STL с помощью SWIG?

Таким образом, можно сделать C ++ для использования вашего потока Python.Что-то вроде:

ch = logger.handlers[NEEDED_HANDLER]
Swig_wrapped_lib.set_stream(ch.stream)

1 Ответ

1 голос
/ 17 марта 2011

Технически, вам нужно реализовать swig typemap (in), который преобразует объект потока python в std :: ostream. Тем не менее, я боюсь, что это очень нетривиально.

...