【问题标题】:create a boost::python::object from a noncopyable instance从不可复制的实例创建 boost::python::object
【发布时间】:2011-10-18 09:55:08
【问题描述】:

我想知道这里是否有人可以帮助我解决我遇到的以下问题。

我似乎无法从绑定到不可复制的 python 的 c++ 类创建 boost::python::object。这是一个简化的例子..

#include <boost/python.hpp>

class A
{
public:
    static A*
    create() {return new A;}

protected:
    A(){}
};

void
doSomething(const A& a)
{
    boost::python::object obj(a);
}

BOOST_PYTHON_MODULE(test)
{
    boost::python::class_<A, boost::noncopyable>("A", boost::python::no_init)
    .def("__init__", boost::python::make_constructor(&A::create));

    boost::python::def("doSomething", &doSomething);
}

然后在 python 中运行时

import test
a = test.A()
test.doSomething(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: No to_python (by-value) converter found for C++ type: A

我意识到 boost::noncopyable 参数会阻止 A 的 to_python 转换器被注册。有谁知道我如何能够从 A 实例创建 boost::python::object ?

提前致谢!

【问题讨论】:

    标签: boost-python


    【解决方案1】:

    使用这个

    boost::python::object obj(**boost::cref(a)**);
    

    【讨论】:

      猜你喜欢
      • 2011-12-06
      • 2020-03-07
      • 2016-03-21
      • 2017-04-05
      • 1970-01-01
      • 2020-11-24
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多