使用boost::python将有状态的Python脚本嵌入C++程序

1 投票
1 回答
2117 浏览
提问于 2025-04-17 05:37

我有一个C++程序,它不断生成数据。我有一个Python类来处理这些数据。我想用这个Python类来处理数据:每当生成一个数据点时,我就可以用这个Python脚本来处理它。但是,这个Python脚本必须是“有状态的”,也就是说,它应该能够记住在处理这个数据点之前做过的事情。

举个非常简单的例子,我的C++程序只是生成数字,而我的Python类计算这些数字的累积和:

Python:

class CumSum:
    def addone(x):
        self._cumsum += x; 
        print self._cumsum;

C++

[Somehow construct a CumSum instance, say c] 

for (int i=0; i<100000; i++) {
   int x = rand() % 1000; 
   [Call c.addone(x)]
}

我听说boost::python是处理这个问题的好方法。有没有人能简单描述一下怎么做?我试着看boost的文档,但对我来说实在太复杂了。

谢谢你的帮助。

1 个回答

0

如果你想了解如何运行你的Python脚本,这里有一些基本信息:

http://www.boost.org/doc/libs/1_47_0/libs/python/doc/tutorial/doc/html/python/embedding.html

如果你想深入了解如何在C++中操作Python对象,可以查看这个链接:

http://www.boost.org/doc/libs/1_47_0/libs/python/doc/tutorial/doc/html/python/object.html

Boost.Python大部分内容是关于如何把你的C++类导出到Python中,但如果你不需要这样做,可以忽略这些内容。

你可能会发现使用一个更简单的包装工具,比如SCXX,会更合适:

http://davidf.sjsoft.com/mirrors/mcmillan-inc/scxx.html

撰写回答