2011-10-18 2 views
2

私は以下の問題を抱えている人がいるかどうか疑問に思っていました。コピー不可能なインスタンスからboost :: python ::オブジェクトを作成します。

私は非コピー可能なPythonにバインドしたC++クラスからboost :: python ::オブジェクトを作成できないようです。ここでは簡単な例..です

#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 

に私は、ブースト::コピー不可のパラメータが登録されているためto_pythonコンバータを防止することを実現しています。だれかがAインスタンスからboost :: python ::オブジェクトを作成する方法を知っていますか?

ありがとうございます!

答えて

2

この

boost::python::object obj(**boost::cref(a)**); 
を使用します
関連する問題