SWIG将流从Python传递到C++

4 投票
1 回答
1086 浏览
提问于 2025-04-16 11:11

C++
我在C++中有一个日志记录类,这个日志记录器在我的库中被广泛使用。这个日志记录器允许设置标准的STL流作为输出流。

Python
这个Python库大量使用了“上面提到的SWIG封装的C++库”,并且使用了Python标准的日志记录功能,特别是StreamHandler。大概是这样的:

logger = logging.getLogger("base_logger")

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

如何通过SWIG将Python流传递给C++库作为STL流?

这样就可以让C++使用你的Python流。大概是这样的:

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

1 个回答

1

从技术上讲,你需要实现一个叫做swig typemap的东西,它可以把Python的流对象转换成C++里的std::ostream。不过,我觉得这并不是一件简单的事情。

撰写回答