在c ++ boost python列表中追加整数的错误

时间:2013-12-19 03:28:01

标签: c++ python-2.7 boost-python

我制作了这段代码并且无效

#include <boost/python.hpp>

namespace bp = boost::python;

int main(int argc, char **argv) {

bp::list points;

int one = 1;
int two = 2;
int three = 3;
points.append(one); #crach!!
points.append(two);
points.append(three);

return 0;}

这就是为什么“append”不接受整数而直接接受哪种方法的原因?

编辑

解决方案是:

#include <boost/python.hpp>

namespace bp = boost::python;

int main(int argc, char **argv) {
    Py_Initialize(); //this part
bp::list points;

int one = 1;
int two = 2;
int three = 3;
points.append(one); #crach!!
points.append(two);
points.append(three);
    Py_Finalize(); //this part
return 0;}

2 个答案:

答案 0 :(得分:2)

我认为您应该在导出的模块中使用boost::python::list,而不是直接从C ++程序中使用boost::python::list。原因很简单:main是Python列表对象的包装器,要使用它,您需要一个Python解释器,当您尝试使用#include <boost/python.hpp> namespace bp = boost::python; bp::list getlist() { bp::list points; int one = 1; int two = 2; int three = 3; points.append(one); points.append(two); points.append(three); return points; } BOOST_PYTHON_MODULE(listtest) { using namespace boost::python; def("getlist", getlist); } 方法操作列表时,该解释器不可用

这是一个有效的例子:

getlist

编译此模块并运行>>> import listtest >>> print listtest.getlist() [1, 2, 3] 函数表明一切都按预期工作:

{{1}}

答案 1 :(得分:0)

从文档中看,它看起来像一个模板方法。所以,你可以尝试

 points.append<int>(one);