SWIG将流从Python传递到C++
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。不过,我觉得这并不是一件简单的事情。